【发布时间】:2013-05-17 21:21:45
【问题描述】:
我编写了结合了小部件、服务同步小部件和用于配置小部件的活动的应用程序。
我已开始向服务器进行网络传输以获取天气数据,但应用程序崩溃了。堆栈调试后,我得到 network in main thread exception。
经过一段时间的谷歌搜索,我已经将所有网络通信重写为 AsyncTask 但是......运行应用程序给了我错误
只有创建视图层次结构的原始线程才能触及它的 意见。
现在我卡住了 - http 客户端获取的数据必须推送到一组 LinearLayouts 和 TextViews/ImageViews 中。 7 天的天气给了我一大堆 - 比 layout.xml 可以处理的还要大。
我在问 - 如何在线程中运行 HTTP 同步(因为主线程网络访问给了我异常)并通过 View.add(object) 在线程中同步视图给了我:
> E/AndroidRuntime(965): FATAL EXCEPTION: AsyncTask #1
> E/AndroidRuntime(965): java.lang.RuntimeException: An error occured while executing doInBackground()
> E/AndroidRuntime(965): at android.os.AsyncTask$3.done(AsyncTask.java:278)
> E/AndroidRuntime(965): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
> E/AndroidRuntime(965): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
> E/AndroidRuntime(965): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
> E/AndroidRuntime(965): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
> E/AndroidRuntime(965): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
> E/AndroidRuntime(965): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
> E/AndroidRuntime(965): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
> E/AndroidRuntime(965): at java.lang.Thread.run(Thread.java:856)
> E/AndroidRuntime(965): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
有什么想法吗?
【问题讨论】:
-
公平地说,OP确实说他研究了
NetworkONMainThreadException的原始问题并将所有网络内容放在AsyncTask中,但现在又遇到了这个问题。这种类型的问题被问得太频繁了,但至少在这种情况下,OP 已经做了一些研究并试图自己解决问题 -
@codeMagic 哦,我完全跳过了问题的底部。我刚刚读了
NetworkONMainThreadException并关闭了。对不起,马特乌斯。
标签: android multithreading networking android-asynctask views