1

在我的 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();
     }
 }

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) {

                }
            }
        }
    }
}

OnActivityCreated()

 @Override
 public void onActivityCreated(Bundle savedInstanceState) {
     super.onActivityCreated(savedInstanceState);
     new NewsFeedAsyncTask().execute();
 }
4

1 回答 1

5

onPostExecute方法总是在 之后执行doInBackground

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

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

只需要做所有 UI 的东西onPostExecute

于 2013-04-03T14:56:33.407 回答