我有一个主类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吗?
答案 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
参数类型