2011-04-13 94 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上执行线程