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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie Tun können, Eine Sache Machen, die ArrayList als Statisch und zugreifen, wenn Sie es wollen.
nun können Sie das sowohl LISTE & LISTE1, wenn Sie es wollen. können Sie auch nicht zurückgeben müssen, arraylist in DoInBackground.
Hoffe es wird Euch Helfen.
Erstellen Sie eine neue Klasse mit zwei Listen. Verwenden Sie diese Klasse als Rückgabetyp.