Android - AsyncTask问题

时间:2011-01-19 08:51:18

标签: android android-asynctask

我需要逐个调用Web服务5次(因为有5个不同的参数)。一旦特定呼叫完成,在后台应该使用文本更新textview:“1st completed”,“2nd Completed”等等。

TextView值应该在后台更新。

我该怎么办?我知道AsyncTask的概念,但我很困惑,我应该写5 AsyncTask然后为每个我写execute()方法来执行AsyncTask?

我只成功进行了一次通话,因为我在postExecute()方法中设置了“1st completed”。但混淆了5次电话。

请建议我一个更好的方法或确切的解决方案。

1 个答案:

答案 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");
    }
}