我在另一個AsyncTask
(2)中使用AsyncTask
(1)。 AsyncTask 1提取在線用戶數據,統計響應中的條目數,並在onPostExecute
中顯示用戶名並運行新的AsyncTask(2)以從服務器獲取圖像並將其加載到ImageView
中。這一切都發生在onPostExecute
。 這是完美的工作,用戶數據被提取和顯示,圖像逐一顯示爲每個條目。嵌套的AsyncTask和onPostExecute
然而,通過陣列的itteration和TextView
在AsyncTask
更新1的onPostExecute
發生的如此之快,它基本上只能說明,其他的人被加載,但不可能在數組中的最後一個用戶名與人檢測眼睛:)
與此同時,AsyncTask
2仍然從在線提取圖像,並顯示錯誤用戶的配置文件圖像。 我明顯在這裏遇到的問題是這2個需要同步。 所以我想我只是等待AsyncTask
2的輸出與get()
方法,但現在什麼都沒有更新,沒有TextView
...這對我來說是意想不到的行爲。
所以,問題是如何同步2 AsyncTask
s?代碼
位澄清,如果它仍然需要
//instantiate first AsyncTask
new AsyncRequest().execute(bundle);
private class AsyncRequest extends AsyncTask<Bundle, Void, String> {
protected String doInBackground(Bundle... bundle) {
String data = null;
try {
data = request(null, bundle[0]); //request the data
return data;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}// end method
protected void onPostExecute(String response) {
JSONArray data = null;
try {
JSONObject response2 = Util.parseJson(response);
data = response2.optJSONArray("data");
int amount = data.length();
TextView s1 = (TextView) findViewById(R.id.some_id);
s1.setText("" + amount); //displays number of items
//display the data
for(int i=0; i<amount; i++){
String email = "";
String id = "";
JSONObject json_obj = data.getJSONObject(i);
Log.d("JSONObject ", ""+json_obj);
String name = json_obj.getString("name");
if (json_obj.has("email")){
email = json_obj.getString("email");
}
if (json_obj.has("id")){
id = json_obj.getString("id");
}
String picture = "http://www.domain.com/"+id+"/picture";
TextView s2 = (TextView) findViewById(R.id.name_placeholder);
s2.setText(name);
//here we do a new AsynTask for each entry and wait until the data is fetched
new DownloadProfileImageTask().execute(picture, name).get();
}
} catch (JSONException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}// end method
哇,爲什麼我沒有想到這個?其實很簡單非常感謝您花時間修改我的代碼並將其作爲答案!我需要對它進行一些小的修改才能正常工作,並相應地更新了您的答案。再次感謝。 – slinden77
PS:我正在更新單個TextView,因爲我想顯示請求中找到的配置文件的用戶信息。所有這些都是在單個頁面/活動上完成的。以後我會實際做一些有用的活動;) – slinden77