我有一个AsyncTask
,其中需要播放ArrayList
的音乐文件。在doInBackground
方法中,我遍历ArrayList并逐个播放歌曲。我想在UI的TextView
上放置一个状态消息或其他信息来指示正在播放哪首歌曲,但获取错误只有创建视图层次结构的原始线程才能触摸其视图。如果我只更新onPreExecute()
和onPostExecute()
的UI小部件,该列表已被播放。有没有办法使用onProgressUpdate
或其他AsyncTask
方法来做到这一点?来自AsyncTask.doInBackground()的用户反馈?
回答
这当然是可能的。这里有一个简单的例子,如果你有你想显示歌曲名,专辑名和歌手名(我还没有全面实施的AsyncTask,只是部分相关onProgressUpdate)字符串:
private class myAsyncTask extends AsyncTask<Void, String, Void>
{
protected Void doInBackground(Void... voids)
{
//Get some list of songs, named songs
for(Song song in songs)//This is the loop where you're playing your songs
{
publishProgress(song.name, song.album, song.artist);
//Play the song and wait for it to finish
}
return null;
}
protected void onProgressUpdate(String... songData)
{
//Assuming three text views exist to display your data
nameTextView.setText(songData[0]);
albumTextView.setText(songData[1]);
artistTextView.setText(songData[2]);
}
}
重要的事情需要注意的是尖括号中的第二类是onProgressUpdate
的参数类型,并且publishProgress
在doInBackground中被调用以触发onProgressUpdate
。您可以在onProgressUpdate中找到的大多数示例都涉及增加ProgressBar上的填充,但该方法在UI线程上运行,并且可以与AsyncTask可以访问的任何视图进行交互。如果您仍然遇到麻烦,请发布当前的AsyncTask,以便将此示例类整合到您已有的内容中。 Here are the docs for AsyncTask for more information.希望这有助于!
很好的答案!这非常有帮助,谢谢! – wufoo 2013-03-08 21:24:20
您应该可以使用onProgressUpdate()从UI线程执行更新。或者,你可以这样做(当不使用AsyncTask时,这是典型的)。
后,更新你这样的UI在UI线程上的事件:它会在UI线程上运行,因此它可以访问和更新视图
view.post(new Runnable() {
@Override
public void run() {
// Update your UI
}
});
。
是的。
当你decalre您的AsyncTask,您decalre即进入任务的各部分的类型:
public class MyTask extends AsyncTask<URL,Integer,Long> {
.
.
.
}
类型的顺序,这个例子:
URL
被传递给doInBackground
(通过publishProgress
)Long
到达onPostExecute
,也doInBackground
返回值在你doInBackground()
,你可以调用publishProgress()
,这将反过来在主线程中调用onProgessUpdate()
(假设您创建的主线程上的AsyncTask)。
有一个在参考文档下用法(link)一个完整的例子。
伟大的信息,谢谢迈克。 – wufoo 2013-03-08 21:24:48
- 1. 来自ICommand的反馈
- 2. Rails - 协会,用户对用户的反馈 - 显示反馈
- 3. Java - 休眠异常 - 反馈无法映射[来自反馈]
- 4. 来自eclipse插件的反馈?
- 5. 来自C#服务的视觉反馈
- 6. Elasticsearch用户点击反馈
- 7. PHP客户反馈
- 8. 用户反馈的数据显示
- 9. HTML输入的理想用户反馈
- 10. MVVM中的多线程/用户反馈
- 11. 发送来自Win 8应用程序的反馈
- 12. 用用户反馈撰写Polly政策
- 13. 翻译自定义PloneFormGen验证器的用户反馈消息
- 14. 用户管理系统反馈
- 15. 用户(很像反馈页)ASP.Net C#
- 16. 根据用户反馈修改代码
- 17. 在Windows Phone上获取用户反馈
- 18. eclipse.org是否有用户反馈论坛?
- 19. 免费用户反馈服务
- 20. 返回来自正在等待的事件的反馈
- 21. 来自帖子的Facebook图形查询坐标反馈
- 22. Flex移动设备 - 来自设备的触摸反馈
- 23. 来自PHP脚本的CMD - 获取反馈
- 24. SQL Server脱机时的客户反馈
- 25. Rails 4 - 用户对其他用户的反馈
- 26. 是否有服务/ API来管理来自javascript的基于Web的反馈
- 27. 用户登录后链接用户ID和反馈ID
- 28. 用户提示通过通知 - 反馈给用户需要?
- 29. 正面反馈
- 30. ItemizedOverlay反馈
你可以发布你的AsyncTask声明吗?不是全部,而只是公开课......扩展AsyncTask'行,和构造函数(如果有的话)? – 2013-03-08 21:08:35