2011-04-13 185 views
0

我使用AsyncTask進行長時間運行的任務,但出現以下錯誤。AsyncTask中的RuntimeException

error in doInBackground====java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

爲什麼我得到那個錯誤,這是什麼意思?

+2

請發佈您的代碼。 – Wroclai 2011-04-13 11:10:49

回答

1

您只能從OnPostExecute和OnProgressUpdate訪問GUI。

0

通常,當您更改asyntask這是不允許的UI這個錯誤出現,另一種方式是實現處理程序,而不是asyntask ...

+0

不準確,您不允許修改'AsyncTask'中的任何地方的用戶界面,但您可以像提及的@Lukas那樣在'onPostExecute'和'onProgressUpdate'中執行此操作。 – WarrenFaith 2011-04-13 13:32:12

1

你可能運行一個非UI線程裏面的任務。

UI線程被設置爲循環。你可以看到在一個堆棧跟蹤或DDMS在調試循環:

... 
MessageQueue.next() line: 146 
Looper.loop() line: 110 
... 

這個循環需要照顧的處理信息,就像一個AsyncTask發送的,具有Handler,像一個AsyncTask是試圖設置。如果您在沒有套圈的線程上啓動任務,則會收到該消息。

0

因爲你沒有發佈你的代碼,所以很難找到問題。

我認爲是因爲您訪問UI線程DoInBackground.(例如:您訪問TextView,或Button或EditText ....)這是使用Asyntask時最常見的錯誤。

您應該在DoInBackGround中發佈一些參數到publishProgress。那麼asyntask會將此參數發送到onProgressUpdate,並且此方法將在UI上執行線程

相關問題