将参数传递给Asyntask

问题描述:

我做了一个扩展Asynctask的普通类。每当我打电话给Asynctask,我有4个字符串,我必须作为asynctask中的参数传递,我可以根据字符串进行进一步处理。 是否有可能在asynctask中发送4个字符串?将参数传递给Asyntask

+0

通() – 2014-08-27 08:41:46

您可以在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(); 

希望这有助于。

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

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.在你的AsyncTask的doInBackground方法解析PARAMS那样:

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}); 

附加信息。有时候您需要传递不同类型的参数对象。要做到这一点,你需要传递的对象[]数组是这样的:

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

和解析此数组中您的AsyncTask的doInBackground方法是这样的:使用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; 
    }