Android主线程中没有网络,外部线程中没有查看更新

时间:2013-05-17 21:21:46

标签: android multithreading networking android-asynctask views

我编写的应用程序结合了窗口小部件,服务同步窗口小部件和用于配置窗口小部件的活动。

我已启动网络传输到服务器以获取天气数据和应用程序崩溃。堆栈调试后,我在主线程异常中有网络

googlin一段时间之后,我已经将所有网络通信重写为AsyncTask但是...运行应用程序给我错误

  

只有创建视图层次结构的原始线程才能触及它   视图。

现在我卡住了 - http客户端提取的数据必须被推送到LinearLayouts和TextViews / ImageViews的集合中。 7天的天气让我相当大 - 比layout.xml可以处理的更大。

我问 - 如何在线程中运行HTTP同步(因为主线程网络访问给了我Exception)和线程中的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.

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我猜您正在尝试更新Views中的doInBackground()。您需要在onPostExecute()或其中一种方法中执行此操作,因为doInBackground()未在UI线程上运行。如果需要,您还可以将结果传递回Activity方法。如果它不是Activity的内部类,那么您可以使用AsyncTask的构造函数从调用params接收Activity,如果您需要传递context AsyncTask 1}}或其他参考文献

如果您已经这样做,请发布您的{{1}},以便我们了解正在发生的事情。