2014-10-02 80 views
3

我有一個錯誤,從我的AsynctaskdoInBackground方法拋出。可能嗎?我怎麼能這樣做,例外將被onPostExecute在doInBackground中拋出異常,並捕獲onPostExecute

+0

從技術上講你可以使用'publishProgress',但它只是一個黑客;-) – 2014-10-02 13:08:37

+0

也許如果你解釋,你想這樣做的原因,我們可以幫你找到一個更好的辦法。 – codeMagic 2014-10-02 13:09:21

回答

6

你不能在線程間拋出異常。

但是,您可以在doInBackground()中發現異常,將其存儲在某個位置,如asynctask中的成員變量,然後在onPostExecute()中處理它。

1

不,你不能在後臺線程中拋出異常。

的更好的方法是通過從後臺線程返回的結果(如果其異常消息然後讓它)至其隨後應根據需要處理結果的onPostExecute()方法。

+2

*「如果它的異常消息讓它成爲」*,你是否建議如果有例外,什麼都不做? – codeMagic 2014-10-02 13:19:28

+0

不,我的意思是將從後臺線程返回的異常消息傳遞給'onPostExecute(),然後它將處理它。你不能從後臺線程拋出異常。 – 2014-10-02 16:13:01

0

您可以通過以下三種方式之一實現這一點:

  1. 商店除外作爲AsyncTask子類的局部變量,並在onPostExecute()方法檢查它,通過laaltoPeter Pei Guo的建議。您可以查詢它的類類型並根據異常的類型執行不同的任務。 AsyncTask保證這樣做是線程安全的。

  2. 變化的一般結果類型Object,並返回要麼異常或從doInBackground()方法的結果,然後檢查結果對象的類類型的onPostExecute()方法,以及演員和它作爲適當的工作。這主要是FutureTaskAsyncTask內部使用)如何實現它的get()方法,儘管它將其狀態存儲在局部變量中,因爲它不能依賴結果類型。

  3. 爲您的結果創建一個持有者類,該結果可以構造爲包含結果或某些特定的異常,定義get方法返回結果類型(如果可用)並拋出異常,然後設置AsyncTask子類的通用結果鍵入該類別,並在從持有人處獲得結果時在onPostExecute()方法中捕獲例外情況。

相關問題