OnPostExecute 在 doInBackground 完成之前运行 -AsyncTask

Har*_* D. 1 android android-asynctask

在我的 Android 项目中,我AsyncTask用于Facebook API新闻提要请求。我收到错误:OnPostExecute method executed before doInBackground request finish.

 private class NewsFeedAsyncTask extends AsyncTask < Integer, Integer, Boolean > {

     @Override
     protected Boolean doInBackground(Integer...params) {
        if (Session.getActiveSession().getState().isOpened()) {
            Get_news_feed();
            return true;
        }
        return false;
     }

     @Override
     protected void onPostExecute(Boolean t) {
         super.onPostExecute(t);
         adapter = new FacebookAdapter(data, context);
         listView.setAdapter(adapter);
         adapter.notifyDataSetChanged();
         mPullRefreshListView.onRefreshComplete();
     }
 }
Run Code Online (Sandbox Code Playgroud)

fetchNewsFeed()

public void fetchNewsFeed() {
    Session.openActiveSessionFromCache(context);
    if (Session.getActiveSession().getState().isOpened()) {
        Request.executeGraphPathRequestAsync(
            Session.getActiveSession(), "me/home", new Request.Callback() {
                @Override
                public void onCompleted(
                    Response response) {

                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

OnActivityCreated()

 @Override
 public void onActivityCreated(Bundle savedInstanceState) {
     super.onActivityCreated(savedInstanceState);
     new NewsFeedAsyncTask().execute();
 }
Run Code Online (Sandbox Code Playgroud)

sda*_*bet 5

onPostExecute方法始终在 之后执行doInBackground

您的问题是该Get_news_feed方法(在方法的后台执行doInBackground)发布了一些要在 UI 线程上完成的内容runOnUiThread,然后返回(在执行发布在 UI 线程上的内容之前)。

如果您希望Get_news_feed同步(在返回之前完成的所有操作),则不应在 UI 线程上发布任何内容。

只需在其中执行所有 UI 内容即可onPostExecute