这是我第一次遇到AsyncTask onPostExecute()的问题。我在Fragment中有其他AsyncTask工作。对于此特定片段类,AsyncTask doInBackground()完成其执行,但 onPostExecute()未调用。我尝试从 doInBackground 返回数据,并在AsyncTask中分配给全局变量。但对于这两种情况, onPostExecute 都没有调用。
这是我的代码段。
private void downloadFeedsAndTweets() {
new DownloadTwitterAsyncTask().execute("ScreenName"); // ScreenName is the proper screen name.
new DownloadInstagramFeedAsyncTask().execute("Instagram_URL"); //Instagram_URL is the actual url.
}
public class DownloadInstagramFeedAsyncTask extends AsyncTask<String, Void, Void> {
List<InstagramData> instagramFeeds = null;
@Override
protected Void doInBackground(String... params) {
try {
// calls http request to get the feeds
instagramFeeds = instagramFeedParser(JsonObject);
Log.d(TAG, "DownloadInstagramFeedAsyncTask instagramFeeds received");
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// show the feeds in ui using the variable instagramFeeds if != null.
}
private List<InstagramData> instagramFeedParser(JSONObject object) throws JSONException, IOException {
// parse the json and returns the list
return instagarmFeedList;
}
}
public class DownloadTwitterAsyncTask extends AsyncTask<String, Void, Void> {
List<TwitterTweet> twitterTweets = null;
@Override
protected Void doInBackground(String... params) {
if (params.length > 0) {
// retrieves twitter tweets and assigns to variable twitterTweets.
twitterTweets = twitterAPI.getTwitterTweets(params[0]);
Log.e(TAG, "DownloadTwitterAsyncTask tweet received");
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
// update ui with the twitter tweets using variable twitterTweets if != null.
}
}
如果从活动调用,则相同的代码有效。在片段中,不会为asyncTasks 调用 onPostExecute。
答案 0 :(得分:0)
解决了 ..在onActivityCreated()中,有一个while循环,其条件将在onPostExecute()完成后失败。如果没有错,我想因为这个while循环,onPostExecute保留在主线程中并等待onActivityCreated完成。