2015-04-19 14 views
-2

在我的應用程序中,我使用AsynkTask(私有內部類)發送「發佈」請求,然後將結果放入數組並返回該數組。所有這些都發生在doInBackground()中。AsynkTask被應用程序中斷後API 19

AsynkTask在onCreate方法中由asyncTask.execute().get();調用。

所以問題是,所有這一切完美的API19下的Android版本。但在API19之後的版本中,應用程序不會等待asyncTask.execute().get();的結果。

在此先感謝。 onCreate:

 MyAsyncTask asyncTask; 
     asyncTask = new MyAsyncTask(); 
     values = asyncTask.execute().get(); // Not waiting for the result 
     for (int i = 0; i < values.length; i++) { 
      listArr.add(values[i]); // So it gives me exception that "values" is null 
     } 
    adapter = new CustomListAdapter(this, items, imgs, values); 
    list = (ListView) findViewById(R.id.list); 
    list.setAdapter(adapter); 

任何想法?

回答

0

實際上,它不能以AsyncTask的方式工作。

這不會真的等待你的結果:

values = asyncTask.execute().get(); 

隨着的AsyncTask,您撥打​​方法,然後你有onPostExecutedonPostCancelled方法,根據閹了的AsyncTask完成或取消。在那裏你可以把結果傳回給調用者。

由於AsyncTask已經暗示了名字,它是異步,這意味着它不會等待

我強烈建議你閱讀從谷歌AsyncTask docs ...

+0

謝謝,但我已經知道了。使用execute()。get()我可以返回結果。它可以在19以下的所有API中正常工作。我也在另一個應用程序中實現了它,它工作正常 – szholdiyarov

+0

嗯,你想知道它爲什麼不起作用,我告訴過你了。 :) – Mjoellnir

0

下面是另一種方法,當你的AsyncTask完成時,它會調用Main中的一個方法和數據。

在你的AsyncTask:

@Override 
protected void onPostExecute(List<YourData> result) { 
    ((MainActivity) activity).updateUI(result); 
} 

而且在MainActivity:

public void updateUI(List<YourData> result) { 
    // process your data 
} 
相關問題