AsyncTask 以及使用 ProgressUpdate 和 Listeners 更新 UI 的问题
当我尝试从 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您是否从代码中调用
onProgressUpdate()
?你不应该这样做。使用publishProgress()
方法。Are you calling
onProgressUpdate()
from your code? You shouldn't do it. UsepublishProgress()
method.onProgressUpdate
不在 UI 线程上运行,因此您无法从此方法访问视图。如果您想更新进度,您应该找到一种方法将AsyncTask
与您的 Activity 同步。我使用的一种方法是使用onBegin
、onUpdate
和onFinish
等方法创建一个界面。您应该在主活动类中实现此接口。然后,您的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 yourAsyncTask
with your activity. A way that I'm using is to create an interface with methods likeonBegin
,onUpdate
andonFinish
. You should implement this interface in your main activity class. Then you should have an instance of your activity inside yourAsyncTask
. In theonProgressUpdate
method you just call the onUpdate method in your activity and update the layout. Hope I've explained it clear enough.