2012-02-16 2 views
4

Я разрабатываю приложение, которое часто связывается с веб-сервером для обновлений. Связь происходит только тогда, когда пользователь запрашивает. Я нашел, что AsyncTask может быть полезен здесь. Поэтому я изменил один класс для моего приложения как AsyncTask.Передача двух параметров методу asynctask. как?

Я хочу передать URL-адрес и параметры почтового сообщения в процесс doInBackground любого класса. Я не могу понять, как это сделать.

Вот it-

public class GetXMLFromServer extends 
    AsyncTask< String, Void, String> { 
private Context context; 

GetXMLCallback gc = null; 

ProgressDialog progressDialog; 

public GetXMLFromServer(Context context, GetXMLCallback gc) { 
    this.context = context; 
    this.gc = gc; 
    progressDialog = new ProgressDialog(this.context); 
} 

protected void onPreExecute() { 
    progressDialog.setMessage("Fetching..."); 
    progressDialog.show(); 
} 

@Override 
protected void onPostExecute(String result) { 
    gc.onSuccess(result); 
    progressDialog.dismiss(); 
} 


@Override 
protected String doInBackground(String... params) { 
    String response = ""; 
    response=CustomHttpClient.executeHttpPost(params[0]); 
    return null; 
} 
    //Confused how to pass URL and http post parameters to doInBackground(). 
    } 

Я один интерфейс, который используется для обработки ответа посланный от onPostExecute(). Это как паров.

package com.project.main.external; 

    public interface GetXMLCallback { 
     void onSuccess(String downloadedString); 
     void onFailure(Exception exception); 
    } 

А вот моя основная деятельность, которая требует ответа HTTP -

public class UpdateList extends Activity implements GetXMLCallback { 
//above line also throws error that interface methods are not implemented yet 
//they are (few lines below) defined. 

private TextView textView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_layout); 
    textView = (TextView) findViewById(R.id.TextView01); 
} 

GetXMLCallback gc = new GetXMLCallback() { 

    public void onFailure(Exception exception) { 

    } 

    public void onSuccess(String downloadedString) { 
     textView.setText(downloadedString); 
    } 

}; 

public void getUpdates(View view) { 
    GetXMLFromServer task = new GetXMLFromServer(UpdateList.this, gc); 
    task.execute(WebConstants.GET_UPDATES); 
} 
    } 
+0

возможно дубликат [doInBackground AsyncTask (в Params ... PARAMS)] (http://stackoverflow.com/questions/6343064/asynctasks-doinbackgroundparams- params) –

ответ

0
public class GetXMLFromServer extends 
AsyncTask< String, Void, String> { 
private Context context; 

GetXMLCallback gc = null; 

ProgressDialog progressDialog; 

public Type variable1; 
public Type variable2; 

и настроить переменные:

GetXMLFromServer task = new GetXMLFromServer(UpdateList.this, gc); 
task.variable1 = XXXXX; 
task.variable2 = XXXXX; 
task.execute(WebConstants.GET_UPDATES); 
+0

спасибо, что это сработало. Но я все еще не могу решить ошибку, говоря «не реализованный метод» из интерфейса GerXMLCallback. Как я могу это решить? – SachinGutte

+0

Я думаю, что это отвечает на вопрос «Передача двух параметров методу asynctask. Как?» – Daniel

+0

Это не эксклюзивный ответ. зачем это делать, когда метод asynctask 'doInBackground' принимает столько аргументов, сколько вы хотите. обратите внимание на 'doInBackground (String ... params)'. это означает, что вы можете передать столько, сколько хотите, и получить доступ к нему в массиве с параметрами :) – hadi

4
  1. Вы можете добавить одну или несколько вещей, конструктору, что у вас уже есть и заселить некоторые члены AsyncTask а затем используйте эти участники, чтобы сделать свой POST в пределах doInBackground
  2. Вы можете изменить его, чтобы продлить AsyncTask<HttpPost, Void, String> или AsyncTask<SOME_CLASS, Void, String>, где SOME_CLASS - это ArrayList of Strings, HashMap или какой-либо другой класс t шляпа вы можете создать, что будет содержать все, что вам нужно построить HttpPost
10

AsyncTask это уже позволяют больше параметров:
В вашем случае назвать это так:

task.execute("parameter_one","parameter_two","parameter_three"); 

В doInBackground вы можете получить их с:

params[0] 
params[1] 
params[2] 

И так далее

Просто обратите внимание, что все paramete rs должен быть одного и того же типа, в вашем случае String.

+0

Это должно быть принятое сообщение – hadi

Смежные вопросы