2013-08-01 79 views
0

我有一個獨立於MainActivity的AsyncTask類。無法得到AsyncTask的結果

protected void onPostExecute(ArrayList<String> result) { 
      System.out.println("flag1"); 
      MainActivity.myLst=new ArrayList<String>(); 
      MainActivity.myLst=result; 
} 

然後我在我的MainActivity中有以下代碼。

public void onCreate(Bundle savedInstanceState) { 
    new AsyncTask().execute(); 
    System.out.println("flag2"); 
    System.out.println(myLst.size()); 
} 

程序首先輸出FLAG2和myLst.size是0。如果予負到其他活動,然後回到主活性和myList.size具有正確的尺寸。我認爲它應該輸出一切,並在MainActivity之前在AsyncTask中完成工作。

+1

得到結果的片段裏面.... 看可能是因爲它首先到達System.out.println完成異步任務並有時間「填充您的列表」。 – nunofmendes

+0

把'sysout'作爲'onPostExecute'的最後一行:'System.out.println(MainActivity.myLst);' – gunar

回答

3

AsyncTask不會「在MainActivity之前完成工作」,這會破壞AsyncTask的目的。

你想要做的是寫一個接口將值傳回給你的活動。 This answer就是一個很好的例子。

3

您正在創建一個AsyncTask以異步執行任務。

你說的是另一個線程,它有工作要做,但是你不會等待他的結果去做你的,這就是爲什麼「flag2」寫在另一個線程之前。

,如果你想等待的結果,你需要實現一個回調onPostExecute()

1

異步意味着它可能是壞了。一個異步任務通常會啓動另一個線程,並行或在後臺執行主線程工作。當execute()返回時,您絕對不能認爲異步任務會完成!

1

像其他人說的那樣,我在你的文章的評論中說過,異步意味着異步,在你的情況下意味着它可能會在完成異步任務之前完成onCreate代碼。

將AsyncTask類放入MainActivity中(並調用某種方法在PostExecute上打印),或者在活動中實現Observing/Observer樣式,以便能夠通知主要活動異步任務結束。

1

您可以在調用Asynctask的代碼中覆蓋onPostExecute()方法。

例如,您有一個名爲myAsyncTask的AsyncTask。然後在你的活動做這樣的:

new myAsyncTask() { 

     @Override 
     protected void onPostExecute(Result result) { 

      super.onPostExecute(result); 
      // Do something with result here 
     } 
    }.execute(value1); 

我有同樣的問題,我想在這個topic