AsyncTask 以及使用 ProgressUpdate 和 Listeners 更新 UI 的问题

发布于 2024-11-13 07:14:35 字数 457 浏览 2 评论 0原文

当我尝试从 AsyncTask onProgressUpdate 更新 TextView(通过侦听器)时,出现“CalledFromWrongThreadException”错误。

如果我尝试从 onPostExecute 更新相同的 TextView ,一切都会正常。

我一直在使用基于的代码进行测试 https://github.com/commonsguy/cw-android/tree/master /Service/WeatherAPI

(带有一个小模组,在 doInBackgroundMethod 中执行 onProgressUpdate,并添加 onProgressUpdate 覆盖)

任何修复建议将不胜感激。

I am getting a "CalledFromWrongThreadException" error when I try to update a TextView (via a listener) from an AsyncTask onProgressUpdate.

If I try to update the same TextView from onPostExecute everything works.

I have been testing using code based on
https://github.com/commonsguy/cw-android/tree/master/Service/WeatherAPI

(with a small mod that does an onProgressUpdate in the doInBackgroundMethod, and adds the onProgressUpdate override)

Any suggestion to fixes would be most appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

相权↑美人 2024-11-20 07:14:35

您是否从代码中调用 onProgressUpdate() ?你不应该这样做。使用 publishProgress() 方法。

Are you calling onProgressUpdate() from your code? You shouldn't do it. Use publishProgress() method.

谁许谁一生繁华 2024-11-20 07:14:35

onProgressUpdate 不在 UI 线程上运行,因此您无法从此方法访问视图。如果您想更新进度,您应该找到一种方法将 AsyncTask 与您的 Activity 同步。我使用的一种方法是使用 onBeginonUpdateonFinish 等方法创建一个界面。您应该在主活动类中实现此接口。然后,您的 AsyncTask 中应该有一个 Activity 实例。在 onProgressUpdate 方法中,您只需调用 Activity 中的 onUpdate 方法并更新布局。希望我已经解释得足够清楚了。

onProgressUpdate doesn't run on UI thread, so you can't access views from this method. If you want to update progress, you should find a way to synchronize your AsyncTask with your activity. A way that I'm using is to create an interface with methods like onBegin, onUpdate and onFinish. You should implement this interface in your main activity class. Then you should have an instance of your activity inside your AsyncTask. In the onProgressUpdate method you just call the onUpdate method in your activity and update the layout. Hope I've explained it clear enough.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文