2014-04-07 230 views
-2

是否可以獲取doInBackground()方法的返回值?獲取asynctask的返回值?

JSONArray response = new SupportFunctions.executeURLWithResponse().execute(url); 

它告訴我:

Description Resource Path Location Type 
Type mismatch: cannot convert from AsyncTask<String,Void,JSONArray> to JSONArray   ContactFunctions.java /BuddyCheck/src/com/pthuermer/buddycheck line 138 Java Problem 

像這樣的事情?

+1

你嘗試閱讀文檔嗎? – njzk2

+1

如果任務在單獨的文件中,則可以使用「接口」。 [這裏是一個例子](http://stackoverflow.com/questions/18517400/inner-class-can-access-but-not-update-values-asynctask/18517648#18517648),否則你可以更新值或調用一個函數在'onPostExecute()'中設置值' – codeMagic

+0

codeMagic是對的,你需要'@ Override''void \t onPostExecute(Result result)' – motoku

回答

0

您可以使響應成爲類或全局變量,然後在異步任務完成時設置該變量。你應該做的大部分應該是你的覆寫onPostExecute。

Get returned JSON from AsyncTask

1

,纔有可能抓住doInBackground()的返回值 - 方法?

不以你想要的方式。

您可以調用一個get()方法來阻止當前線程並等待異步工作完成。這通常不是你想要的 - 你要想要工作要異步完成(否則,爲什麼要有AsyncTask?)。

將需要JSONArray響應的代碼移動到本身或其他將由onPostExecute()執行的其他方法中。

+0

我使用asynctask,因爲它是從URL獲取JSON響應的唯一方法,對嗎? – user3432220

+0

@ user3432220不需要,你需要(應該)在後臺線程上完成它,但這並不意味着你必須使用'AsyncTask',儘管它經常用於這種類型的東西。你應該閱讀關於線程[這裏](http://android-developers.blogspot.com/2009/05/painless-threading.html)和[這裏](http://developer.android.com/guide/components/ processes-and-threads.html) – codeMagic

+0

@ user3432220:您需要使用後臺線程「從URL中獲取JSON響應」。一個'AsyncTask'是一個後臺線程的包裝器。但是你需要一個後臺線程的原因是,你不要捆綁等待網絡I/O的主應用程序線程。在'onPostExecute()'中處理'AsyncTask'後臺工作的結果 - 這就是爲什麼它在那裏。 – CommonsWare