我需要逐个调用Web服务5次(因为有5个不同的参数)。一旦特定呼叫完成,在后台应该使用文本更新textview:“1st completed”,“2nd Completed”等等。
TextView值应该在后台更新。
我该怎么办?我知道AsyncTask的概念,但我很困惑,我应该写5 AsyncTask然后为每个我写execute()方法来执行AsyncTask?
我只成功进行了一次通话,因为我在postExecute()方法中设置了“1st completed”。但混淆了5次电话。
请建议我一个更好的方法或确切的解决方案。
答案 0 :(得分:11)
您只需要1个AsyncTask,您需要在doInBackground()
中完成所有5个呼叫,并且每次完成一个呼叫时publishProgress
通过例如已完成呼叫的号码,然后在结束时在onPostExecute
中做你需要的任何事情。
一种简单的方法:
private class ServiceCallTask extends AsyncTask<String, Integer, Void> {
protected void onPreExecute() {
//prepare whatever you need
myTextField.setText("starting calls");
}
protected Void doInBackground(String... params) {
//process params as you need and make the calls
doCall1();
publishProgress(1); //this calls onProgressUpdate(1)
doCall2();
publishProgress(2);
doCall3();
publishProgress(3);
doCall4();
publishProgress(4);
doCall5();
publishProgress(5);
return;
}
protected void onProgressUpdate(Integer... progress) {
//this runs in UI thread so its safe to modify the UI
myTextField.append("finished call " + progress);
}
protected void onPostExecute(Void unused) {
myTextField.append("all calls finished");
}
}