我有一個錯誤,從我的Asynctask
的doInBackground
方法拋出。可能嗎?我怎麼能這樣做,例外將被onPostExecute
?在doInBackground中拋出異常,並捕獲onPostExecute
回答
你不能在線程間拋出異常。
但是,您可以在doInBackground()
中發現異常,將其存儲在某個位置,如asynctask中的成員變量,然後在onPostExecute()
中處理它。
不,你不能在後臺線程中拋出異常。
的更好的方法是通過從後臺線程返回的結果(如果其異常消息然後讓它)至其隨後應根據需要處理結果的onPostExecute()
方法。
*「如果它的異常消息讓它成爲」*,你是否建議如果有例外,什麼都不做? – codeMagic 2014-10-02 13:19:28
不,我的意思是將從後臺線程返回的異常消息傳遞給'onPostExecute(),然後它將處理它。你不能從後臺線程拋出異常。 – 2014-10-02 16:13:01
您可以通過以下三種方式之一實現這一點:
商店除外作爲
AsyncTask
子類的局部變量,並在onPostExecute()
方法檢查它,通過laalto和Peter Pei Guo的建議。您可以查詢它的類類型並根據異常的類型執行不同的任務。AsyncTask
保證這樣做是線程安全的。變化的一般結果類型
Object
,並返回要麼異常或從doInBackground()
方法的結果,然後檢查結果對象的類類型的onPostExecute()
方法,以及演員和它作爲適當的工作。這主要是FutureTask
(AsyncTask
內部使用)如何實現它的get()
方法,儘管它將其狀態存儲在局部變量中,因爲它不能依賴結果類型。爲您的結果創建一個持有者類,該結果可以構造爲包含結果或某些特定的異常,定義get方法返回結果類型(如果可用)並拋出異常,然後設置
AsyncTask
子類的通用結果鍵入該類別,並在從持有人處獲得結果時在onPostExecute()
方法中捕獲例外情況。
- 1. 拋出異常並捕獲異常?
- 2. 捕獲從DLL中拋出的異常
- 3. 捕獲在UDPClient.EndReceive拋出的ObjectDisposedException異常
- 4. 在IE8中的GWT - 拋出異常並且沒有捕獲到
- 5. 在IE8中jQuery「異常拋出並未捕獲」錯誤
- 6. 在JRuby中拋出Java異常並使用Java捕獲它
- 7. AsyncTask doInBackground停止...沒有異常拋出
- 8. ZF3:拋出和捕獲異常
- 9. 拋出異常但未捕獲
- 10. 無法捕獲拋出的異常
- 11. 拋出和捕獲自定義異常
- 12. 拋出和捕獲IOException異常
- 13. 拋出一個異常,捕獲它
- 14. 忽略拋出並捕獲到庫中的異常
- 15. 從函數中拋出並捕獲異常
- 16. 從JUnit測試中捕獲並重新拋出異常
- 17. 誰在拋出(並捕獲)這個MySQL異常?
- 18. 捕獲幾個異常並重新拋出一個常規異常
- 19. 在@Before中拋出異常,在@AfterThrowing中捕獲
- 20. 捕捉異常,然後拋出/發送異常並繼續
- 21. 捕捉多個異常並拋出異常
- 22. 如何捕捉異常並拋出不同的異常
- 23. 拋出和拋出arg捕獲異常有什麼區別?
- 24. 遞增加載捕獲並拋出異常Metro應用程序
- 25. 拋出異常並將它們捕獲到其他地方
- 26. 捕獲並重新拋出.NET異常的最佳實踐
- 27. 編輯網格行對話框「異常拋出並未捕獲」
- 28. 捕獲異常,添加數據,並重新拋出
- 29. 以相同的方法拋出並捕獲異常
- 30. Guava CacheLoader拋出並捕獲自定義異常
從技術上講你可以使用'publishProgress',但它只是一個黑客;-) – 2014-10-02 13:08:37
也許如果你解釋,你想這樣做的原因,我們可以幫你找到一個更好的辦法。 – codeMagic 2014-10-02 13:09:21