在doINBackground android里面设置textview

时间:2013-04-26 06:46:07

标签: android android-asynctask textview

我有一个主类A,我从中创建了一个扩展Asynctask的B类对象。已经在A中设置了内容视图。现在在B的doInBackground中,我想更新A的textView,但是它给出了

Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

异常。我也尝试在B中声明setcontentview,但没有用,有人可以告诉我如何在B中编辑A的textview吗?

5 个答案:

答案 0 :(得分:4)

覆盖onProgressUpdate并在doInBackground中调用publishProgress

答案 1 :(得分:2)

您需要从UI线程中调用setText(),因此来自onPreExecute()onPostExecute()onProgressUpdate()

您也可以在runOnUiThread()中使用doInBackground()处理程序,但这样做会破坏使用AsyncTask的目的。

答案 2 :(得分:2)

如果文字更新与进度信息有关,那么您可以使用publishProgress() / onProgressUpdate()

如果它不是更广泛意义上的进展更新,那么我和Raghav在一起 - 你应该考虑采用另一种方法。

答案 3 :(得分:0)

我们不应该在doinBackgroud中执行任何ui更改。您应该并且可以在后执行中执行。您还可以在preexecute或onProgressUpdate中设置通知。

希望这会对你有所帮助。

答案 4 :(得分:0)

doInBackground是工作线程。您已在UI线程中处理View。请在onPreExecute()onPostExecute()onProgressUpdate中执行此操作。所有这些都在UI线程中工作。

当然,您可以将整数传递给onProgressUpdate。请注意第二个参数:AysncTask<Void, Integer, VOid>,第二个参数表示onProgressUpdate参数类型