2014-08-27 2 views
0

Я сделал общий класс, который расширяет Asynctask. Всякий раз, когда я вызываю Asynctask, у меня есть 4 строки, которые я должен передать как параметр в asynctask, который я могу продолжить в зависимости от строк. Можно ли отправить 4 строки в asynctask?Передача аргументов Asyntask

+0

передать его с помощью doInBackground() –

ответ

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

Надеется, что это помогает.

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. В ваших 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}); 

Дополнительная Информация. Иногда бывает, что вам нужно передать объекты параметров разных типов. Для достижения этой цели необходимо передать Object [] массив как это:

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

и разобрать этот массив в вашем методе doInBackground AsyncTask как это:

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; 
    } 
Смежные вопросы