【发布时间】:2012-07-04 21:49:12
【问题描述】:
我需要将两个参数(lv 和位置)传递给 Asynctask doInBackground 方法,但我不知道该怎么做...
LoadSound.execute(lv,position)
class LoadSound extends AsyncTask<**[ListView,int]**, String, String>
谢谢!
编辑:
我有一个列表视图。如果您单击项目播放声音(来自 Internet)。
我想用 Asynctask 显示一个 progressDialog。
在 doInBackground 方法中,我有 itemOnClick:
HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);
因此我需要传递 lv 和位置。
【问题讨论】:
-
我不确定你为什么要将
ListView传递给doInBackground(...)的AsyncTask方法,但基本上你真的不想这样做。ListView可能是Activity内容视图的一部分,如果您从运行doInBackground(...)代码的Thread中触摸它,您将抛出异常并且您的应用程序将崩溃。 -
好吧,你显然没有理解我的评论或者你不相信我。无论如何,我会再说一遍 - 尝试从不同的线程访问属于主 (UI) 线程的对象,例如,
AsyncTask的doInBackground(...),将失败并导致您的应用程序崩溃。我真的不知道您为什么要使用AsyncTask来播放声音——例如,如果您想要背景音乐,请使用Service。或者,如果您坚持使用AsyncTask,请在您的Activity中使用ListView选择侦听器并将您的HashMap作为参数传递给AsyncTask。