2013-04-03 152 views
-1

在我的android項目中,我使用AsyncTask來調用Facebook新聞提要的請求。OnPostExecute在doInBackground完成之前運行-AsyncTask

我有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

什麼是OnBackground方法? – fiddler

+0

對不起,我的意思是doInBackground() –

+1

是什麼讓你覺得'onPostExecute'在'doInBackground'之前被調用? – fiddler

回答

2

onPostExecute方法是總是之後執行doInBackground

你的問題是Get_news_feed方法(這是從doInBackground方法後臺執行)張貼一些東西做回來runOnUiThread UI線程,然後返回(執行張貼在UI線程的東西前)。

如果您希望Get_news_feed是同步的(返回之前完成的所有事情),則不應在UI線程上發佈任何內容。

只需在onPostExecute中完成所有的UI工作。

+0

我沒有得到結論問題的原因,也沒有(像往常一樣)爲downvotes。這是一個很好的問題。也許是本地化的(無論這意味着什麼),但它的代碼值得仔細研究。格式不正確的代碼,但很容易修復。隨你。只是我的兩分錢。尋找爲什麼我的'postExecute'根本不運行。 – DSlomer64

相關問題