Android AsyncTask mehrere Werte zurückgeben, die in doInBackground verwendet werden, für die onPostExecute

Ich habe gerade gelesen, getestet und die AsyncTask vor kurzem und jetzt ich muss wissen, wie kann ich mehrere Werte übergeben in onPostExecute Teil. Auch ich benutze einen JSON-parser, um Werte aus dem web, aber die Werte bekomme ich aus der JSON mehrere Werte, wo gebe ich diese Werte in ein array getrennt durch die Spalte-Header der einzelnen Daten geholt und das ist der Teil, wo ich zurückgeben sollte es für die onPostExecute verwenden. Aber soweit ich weiß kann man nur mit der return-einmal pro run (korrigiert mich wenn ich falsch Liege bitte).

Naja hier mein code bisher:

public class GetInfo extends AsyncTask<String, Void, List<String>>{

        private final String TAG = null;
        InputStream is = null;
        StringBuilder sb=null;
        List<String> list = new ArrayList<String>();

        @Override
        protected List<String> doInBackground(String... url) {
            String result = "";

            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

                //CONNECT TO DATABASE
                 try{
                         HttpClient httpclient = new DefaultHttpClient();
                         HttpPost httppost = new HttpPost(url[0]);
                         httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                         HttpResponse response = httpclient.execute(httppost);
                         HttpEntity entity = response.getEntity();
                         is = entity.getContent();
                         Log.v(TAG, "connected");
                 }catch(Exception e){
                         Log.v(TAG, "run failed");

                         Log.e("log_tag", "Error in http connection "+e.toString());
                 }

                 //BUFFERED READER FOR INPUT STREAM
                try{
                     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                     sb = new StringBuilder();
                     String line = "0";

                     while ((line = reader.readLine()) != null) {
                             sb.append(line + "\n");
                     }
                     is.close();
                     result=sb.toString();
                     Log.v(TAG, "buffered read");
                 }catch(Exception e){
                     Log.v(TAG, "buffered error");
                         Log.e("log_tag", "Error converting result "+e.toString());
                 }

                //CONVERT JSON TO STRING
                try{
                     Log.v(TAG, result);

                         JSONArray jArray = new JSONArray(result);
                         JSONObject json_data=null;

                         for(int i=0;i<jArray.length();i++){
                             Log.v(TAG, "loop start");

                                 json_data = jArray.getJSONObject(i);
                                 list.add(json_data.getString("id"));
                                 list2.add(json_data.getString("city"));
                                 Log.v(TAG, "list added");
                         }

                 }catch(JSONException e){
                     Log.v(TAG, "rest failed");
                         Log.e("log_tag", "Error parsing data "+e.toString());
                 }

                 Log.v(TAG, list.toString());

                return list; //I also need to return the list2 here

        }

        @Override
        protected void onPostExecute(List<String> result) {
            cities = result; //lost in this part hahaha!
            showCities();
        }

    }

Hinzu, dieser code funktioniert einwandfrei, wenn ich zurückkehre, nur einen String-Array (in der Liste), aber ich verwirrt, jetzt im zweiten Teil. Auch die Städte der Deklaration in der Main-Klasse und ShowCities() nur für die Darstellung verwendet. Also ich nicht die Mühe, das hinzufügen des codes.

  • verwenden onPregressUpdate, und implementieren Sie das postExecute-Logik
InformationsquelleAutor KaHeL | 2012-08-22
Schreibe einen Kommentar