Android:Asynctask中的多个参数

时间:2012-07-04 21:49:12

标签: android android-asynctask

我需要将两个参数(lv和位置)传递给Asynctask doInBackground方法,但我不知道它是怎么做的......

LoadSound.execute(lv,position)
class LoadSound extends AsyncTask<**[ListView,int]**, String, String>

谢谢!

编辑:

我有一个listView。如果您单击项目播放声音(来自Internet)。

我想用Asynctask显示progressDialog。

在doInBackground方法中,我有itemOnClick:

HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);

因此我需要传递lv和位置。

3 个答案:

答案 0 :(得分:22)

尝试在AsyncTask中创建构造函数,无论何时创建对象,都可以传递参数。 像这样:

MyAsyncTask asynctask = new MyAsyncTask(10, true, myObject);
//this is how you create your object

 public class MyAsyncTask extends AsyncTask<Void, Void, Void>{

        int a;
        boolean b;
        Object c;

        public MyAsyncTask(int a, boolean b, Object c){
            this.a = a;
            this.b = b;
            this.c = c;
        }

        @Override
        protected Void doInBackground(Void... params) {
            if(b)
                c = a;
            return null;
        }

    }

然后你可以拨打asynctask.execute();

编辑:在阅读更新后的问题后,我同意Squonk使用服务作为播放背景声音;你也可以在启动你的AsynkTask之前显示一个进度对话框(如果这个是unfinetly)并在你的postexecute上解除它。

答案 1 :(得分:8)

就像this中的回答一样,你可以使用一个对象数组作为参数:

private class LoadSound extends AsyncTask<Object, String, String> {
    @Override
    protected void doInBackground(Object... params) {
        ListView lv = (ListView) params[0];
        int position = (Integer) params[1];
    }
    // ...
}

务必将它们转换为正确的对象类型

这就是如何调用AsyncTask

LoadSound loadSound = new LoadSound();
loadSound.execute(lv, position);

答案 2 :(得分:3)

您可以创建一个包含参数的内部类,如下所示:

public static class LoadSoundParam {
    public ListView lv;
    public int position;
}

class LoadSound extends AsyncTask<LoadSoundParam, String, String> {
    ...
}

LoadSoundParam param = new LoadSoundParam();
param.lv = lv;
param.position = position;

loadsound.execute(param);

修改

正如Squonk在对你的OP的评论中提到的那样,将ListView传递给AsyncTask并不是一个好主意。因此,此代码显示了如何将多个参数传递给AsyncTask,但在您的情况下使用它并不是一个好主意。