Tôi vừa mới đọc và kiểm tra AsyncTask gần đây và bây giờ tôi cần biết làm cách nào tôi có thể chuyển nhiều giá trị trong phần onPostExecute. Tôi sử dụng trình phân tích cú pháp JSON để lấy giá trị từ web nhưng giá trị tôi nhận được từ JSON là nhiều giá trị mà tôi chuyển các giá trị đó vào một mảng được phân tách bằng tiêu đề cột của từng dữ liệu được tìm nạp và đây là phần mà tôi phải trả về để sử dụng onPostExecute. Nhưng theo như tôi biết bạn chỉ có thể sử dụng sự trở lại một lần cho mỗi lần chạy (sửa tôi nếu tôi sai xin vui lòng).Android AsyncTask trả về nhiều giá trị trong doInBackground để sử dụng cho onPostExecute
Vâng đây là mã của tôi cho đến nay:
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();
}
}
Vâng thêm, mã này hoạt động tốt khi tôi trở về chỉ có một chuỗi Array (danh sách) nhưng tôi bị lẫn lộn bây giờ trong phần thứ hai. Ngoài ra các thành phố được khai báo trong lớp Main và ShowCities() chỉ được sử dụng để hiển thị. Vì vậy, tôi không bận tâm thêm các mã.
sử dụng onPregressCập nhật và triển khai bài đăng của bạnExecute logic có – rajpara