AsyncTask onPostExecute()不是从Fragment类调用的,而是在Activity类中工作

时间:2015-05-11 07:42:10

标签: android android-fragments android-activity android-asynctask

这是我第一次遇到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。

1 个答案:

答案 0 :(得分:0)

解决了 ..在onActivityCreated()中,有一个while循环,其条件将在onPostExecute()完成后失败。如果没有错,我想因为这个while循环,onPostExecute保留在主线程中并等待onActivityCreated完成。