0

我有一个主类 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?

4

5 回答 5

3

覆盖 onProgressUpdate 并在 doInBackground 中调用 publishProgress

于 2013-04-26T06:56:51.350 回答
2

您需要从 UI 线程调用,setText()所以从或 inonPreExecute()onPostExecute()onProgressUpdate()

您也可以runOnUiThread()在 中使用处理程序doInBackground(),但这违背了使用 AsyncTask 的目的。

于 2013-04-26T06:48:18.107 回答
2

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

如果这不是更广泛意义上的进度更新,那么我支持 Raghav——那么你应该考虑另一种方法。

于 2013-04-26T06:52:40.113 回答
0

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

希望这会帮助你。

于 2013-04-26T06:49:44.697 回答
0

doInBackground 是工作线程。您在 UI 线程中有句柄视图。请在onPreExecute(),onPostExecute()onProgressUpdate. 所有这些都在 UI 线程中工作。

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

于 2013-04-26T06:49:47.197 回答