2014-11-01 4 views
0

У меня есть скрипт php, который возвращает json в android. Успех msg не проблема. Но как я буду работать над формой validation error msg как «Username уже существует», «Invalid student Id» и т. Д., Что внутри json_encode через android. Я попытался изменить тип данных в JSONObject, но он дал мне много красной строки.AsyncTask doInBackground и postExecute

Любые идеи или предложения Благодарю вас, ребята.

public class httpRegister extends AsyncTask <String, Integer, String> { 

    int success; 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    protected String doInBackground(String... arg0) { 
     // TODO Auto-generated method stub 
     try { 
      String studId = studentId.getText().toString(); 
      String uName = username.getText().toString(); 
      String pWord = password.getText().toString(); 
      String cPWord = cfmPassword.getText().toString(); 


      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("studNum", studId)); 
      params.add(new BasicNameValuePair("username", uName)); 
      params.add(new BasicNameValuePair("password", pWord)); 
      params.add(new BasicNameValuePair("cfmPassword", cPWord) 

      JSONParser parser = new JSONParser(); my Class in other activity 
      JSONObject json = parser.requestHttp(REG_URL, "POST", params); 

      success = json.getInt(TAG_SUC);//get success msg 

      if(success == 1){ //No problem here 
       return json.getString(TAG_MSG); 
      }else{ 
       //If there's invalid input php script return here 
       return json; //Problem returning json to PostExecute 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     //User JSONObject here to activity 
    } 

} 
+0

Ваш doInBackground вернет Sting, поскольку ваш тип результата в Async - это String, поэтому он даст вам ошибку при попытке вернуть JSONObject. – Shvet

+0

Что мне нужно делать? protected String doInBackground (String ... arg0) мне нужно изменить это? –

+0

@MajikeroGallardo: Вы действительно запустили этот код? Есть части, которые могут вызвать серьезные ошибки. – Squonk

ответ

0

Для возврата JSONObject попробовать это:

public class httpRegister extends AsyncTask <String, Void, JSONObject> { 

    int success; 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    protected JSONObject doInBackground(String... arg0) { 
     // TODO Auto-generated method stub 
     try { 
      String studId = studentId.getText().toString(); 
      String uName = username.getText().toString(); 
      String pWord = password.getText().toString(); 
      String cPWord = cfmPassword.getText().toString(); 


      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("studNum", studId)); 
      params.add(new BasicNameValuePair("username", uName)); 
      params.add(new BasicNameValuePair("password", pWord)); 
      params.add(new BasicNameValuePair("cfmPassword", cPWord) 

      JSONParser parser = new JSONParser(); my Class in other activity 
      JSONObject json = parser.requestHttp(REG_URL, "POST", params); 

      return json; 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 

     if(result!=null){ 
      // Get Data from JSONResponce here 
     } 

      success = json.getInt(TAG_SUC);//get success msg 
     //User JSONObject here to activity 
    } 

} 
+0

Thx Dhaval Кажется, я не понял параметры AsyncTask

+0

Согласно [Документация для Android] (http: // разработчик. android.com/reference/android/os/AsyncTask.html) в AsyncTask <параметр, прогресс, результат> {}. поэтому, если вы хотите, чтобы JsonObject в результате использовал JSONObject в результате. – Shvet

0

Try Someyhing как этот

public class httpRegister extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... arg0) { 
     // TODO Auto-generated method stub 
     try { 
      String studId = studentId.getText().toString(); 
      String uName = username.getText().toString(); 
      String pWord = password.getText().toString(); 
      String cPWord = cfmPassword.getText().toString(); 


      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("studNum", studId)); 
      params.add(new BasicNameValuePair("username", uName)); 
      params.add(new BasicNameValuePair("password", pWord)); 
      params.add(new BasicNameValuePair("cfmPassword", cPWord) 

      JSONParser parser = new JSONParser(); my Class in other activity 
      JSONObject json = parser.requestHttp(REG_URL, "POST", params); 

      return json.toString(); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return "Error"; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     if(result.equals("Error")){ 
      //SHOW ERROR MSG 
     }else{ 
      //doSomething 
     } 
    } 

} 
+0

Мне нужен json^__^ –

+0

измененный ответ кажется, что ваша проблема решена сейчас – ashutiwari4

0

Вы можете сделать что-то вроде этого:

public class httpRegister extends AsyncTask<String, Void, String> { 
      @Override 
      protected String doInBackground(String... arg0) { 
       // TODO Auto-generated method stub 

       try { 
        String studId = studentId.getText().toString(); 
        String uName = username.getText().toString(); 
        String pWord = password.getText().toString(); 
        String cPWord = cfmPassword.getText().toString(); 
        List<NameValuePair> params = new ArrayList<NameValuePair>(); 
        params.add(new BasicNameValuePair("studNum", studId)); 
        params.add(new BasicNameValuePair("username", uName)); 
        params.add(new BasicNameValuePair("password", pWord)); 
        params.add(new BasicNameValuePair("cfmPassword", cPWord)); 
        JSONParser parser = new JSONParser(); 

        // my Class in other activity 

        JSONObject json = parser.requestHttp(REG_URL, "POST", params); 
        return "Success"; 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       return "Error"; 
      } 

      @Override 
      protected void onPostExecute(String result) { 
       if (result.equals("Success")) { 
        // DO SOMETHING 
       } else if (result.equals("Error")) { 
        // SHOW ERROR MSG 
       } 
       if (result.equals("Username_Exists")) { 
        // show toast 
       } 
      } 
     } 
0

Проблема решена спасибо очень быстро предложение на мой вопрос Im новое здесь для вопросов. Я, хотя stackoverflow не является активным сайтом bec. когда я смотрю на дату публикации, мне кажется, что это было 3-5 лет назад, когда я искал здесь. ха-ха все равно.

Сначала я делаю, как этот

AsyncTask <String, Integer, String>{ 
} 
protected String doInBackground(String... arg0){ 
} 
protected void onPostExecute(String result){ 
} 

Тогда это изменить его

AsyncTask<JSONObject, Object, JSONObject> //But I don't know why here haha 
protected JSONObject doInBackground(JSONObject... arg0)// And the dot dot dot{ 

    //here is 
    return json; 
} 

protected void onPostExecute(JSONObject result){ 
//here I use json 
int success2; 
     try { 
      success2 = result.getInt(TAG_SUC); 
      if(success2 == 1){ 
       //get success msg 
      }else{ 
       //get msg's of form validation 
      } 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

Есть ли какие-либо идеи по улучшению?^___^thx ко всем.

+0

Ознакомьтесь с документацией на Android [здесь] (http://developer.android.com/reference/android/os/AsyncTask.html). – Shvet

Смежные вопросы