在doInBackground完成之前运行OnPostExecute -AsyncTask

时间:2013-04-03 14:48:15

标签: android android-asynctask

在我的android项目中,我使用AsyncTask来调用Facebook请求新闻源。

我遇到了AsyncTask的问题:在doInBackground请求完成之前执行了 OnPostExecute方法。

这是我的代码:

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

        @Override
        protected Boolean doInBackground(Integer... params) {

            try {


                if( Session.getActiveSession().getState().isOpened()){


                Get_news_feed ();
                 return true;
                }

                return false;

            }
                catch (NullPointerException e) {

                return false;
            }



        }


        @Override
        protected void onPostExecute(Boolean t) {
            super.onPostExecute(t);     

 adapter =new Facebook_adapter(facebook.json.gen.klase.Obavijest.data,context);
            actualListView.setAdapter(adapter);
            adapter.notifyDataSetChanged();     
            mPullRefreshListView.onRefreshComplete();

        }

    }

Get_news_feed()

public void Get_news_feed () {
        try {

                Session.openActiveSessionFromCache(context);
            if (Session.getActiveSession().getState().isOpened()) {
            context.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    Request.executeGraphPathRequestAsync(
                            Session.getActiveSession(), "me/home",new Request.Callback() {
                                @Override
                                public void onCompleted(
                                        Response response) {
if (response.getGraphObject()!=null){


                               System.out.println("Json:"+response.getGraphObject().getInnerJSONObject());

                            }); 
                }
            });
            } 
        } catch (Exception e2) {
            System.out.println("Error:"+e2);
        }
        }
    }

OnActivityCreated()

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        new Task().execute();

    }

1 个答案:

答案 0 :(得分:2)

onPostExecute之后doInBackground方法始终执行。

你的问题是Get_news_feed方法(在doInBackground方法的后台执行)发布了一些要用runOnUiThread在UI线程上完成的东西,然后返回(在UI线程上发布的东西被执行之前。)

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

只需改为onPostExecute中的所有UI内容。