0

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

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

经过一段时间的谷歌搜索,我已经将所有网络通信重写为 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.

有任何想法吗?

4

1 回答 1

1

我猜你正在尝试更新Viewsin doInBackground()。您需要在线程上运行onPostExecute()的其他方法中或其中一种方法中执行此操作。如果需要,您还可以将结果传递回方法。如果它不是您的内部类,那么您可以使用's 构造函数从调用中接收,如果您需要传递它一个或其他引用doInBackground()UIActivityActivityAsyncTaskparamsActivitycontext

如果您已经在这样做,请发布您的AsyncTask,以便我们了解发生了什么。

于 2013-05-17T21:30:14.600 回答