için kullanılabilecek doInBackground'daki birden çok değeri döndürüyor Yakın zamanda AsyncTask'ı okudum ve test ettim ve şimdi onPostExecute bölümünde birden çok değeri nasıl geçirebileceğimi bilmem gerekiyor. Web'den değerler almak için bir JSON ayrıştırıcısı kullanıyorum, ancak JSON'tan aldığım değerler, bu değerleri getirilen her bir verinin sütun başlıklarıyla ayrılmış bir diziye geçirdiğim birden çok değerdir ve bu, geri döndürmem gereken kısmıdır. onPostExecute kullanımı için. Ama bildiğim kadarıyla sadece bir kez koşuyu bir kere kullanabiliyorsunuz (eğer yanılıyorsam düzeltin lütfen).Android AsyncTask, onPostExecute
Eh burada şimdiye kadar benim kod:
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();
}
}
Eh eklemek için, sadece bir dize Array (liste) return ama ikinci bölümde artık karışık zaman bu kod çalışıyor. Ayrıca, şehirler Ana sınıfta ve yalnızca gösterim için kullanılan ShowCities() olarak bildirilir. Bu yüzden kodları eklemekten rahatsız değilim.
onPregressUpdate kullanın ve postExecute mantığınızı buradan uygulayın – rajpara