将参数传递给Asynctask

时间:2014-08-27 08:37:03

标签: android parameters android-asynctask

我制作了一个扩展Asynctask的通用类。每当我调用Asynctask时,我有4个字符串,我必须在asynctask中作为参数传递,我可以根据字符串进行进一步处理。 是否可以在asynctask中发送4个字符串?

3 个答案:

答案 0 :(得分:1)

一种方法是,您可以使用构造函数获取变量,在创建对象时传递变量。 例如,

public class SapleAsynctask extends AsyncTask<Void, Void, Boolean> {
public SapleAsynctask(String s1, String s2,  String s3, String s4) {
this.s1 = s1;
.
.
.
    }
}

如果您想获取doInBackground()的数据,可以在调用asynctask.excecute([])时传递参数,

 public class SapleAsynctask extends AsyncTask<String, Void, Boolean> {
@Override
    protected Boolean doInBackground(String... params) {
S1 = params[0];
s2 = params[1];
.
.

        return false;
    }
}

使用

调用asynctask
SapleAsynctask sapleAsynctask = new SapleAsynctask ();
sapleAsynctask .excecute(new String[] {"s1", "s2", "s3", "s4"});

答案 1 :(得分:1)

第1步。在你的AsyncTask的doInBackground方法中解析这样的参数:

public class MyAsyncTask extends AsyncTask<String, Void, Void> {
    // ...

    @Override
    protected String doInBackground(String... params) {
        String s1 = params[0];
        String s2 = params[1];
        // ...

        return null;
    }

第2步。执行AsyncTask时 - 传递String []数组:

myAsyncTask.execute(new String[] {s1, s2, s3, s4}); 

其他信息。有时您需要传递不同类型的参数对象。要实现这一点,您需要传递Object []数组,如下所示:

myAsyncTask.execute(new Object[] {myObj1, s2, myObj3, s4});

并在AsyncTask的doInBackground方法中解析此数组,如下所示:

public class MyAsyncTask extends AsyncTask<String, Void, Void> {
    // ...

    @Override
    protected String doInBackground(Object... params) {
        MyObject myObj1 = (MyObject) params[0];
        String s2 = (String) params[1];
        // ...

        return null;
    }

答案 2 :(得分:0)

您可以在AsyncTask的构造函数中传递它们,如下所示:

public class ProcessTask extends AsyncTask<Void, Integer, String>{
    String s1, s2, s3, s4;

    public ProcessTask(String str1, String str2, String str3, String str4) {
        // TODO Auto-generated constructor stub
        s1 = str1;
        s2 = str2;
        s3 = str3;
        s4 = str4;

    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        //do something with strings
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(Void... params) {
        // TODO Auto-generated method stub

        //your code

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub

        super.onPostExecute(result);
    }


}

请致电:

ProcessTask p =new ProcessTask(s1, s2, s3, s4);
p.execute();

希望这有帮助。