Android - проблема с AsyncTask - PullRequest
2 голосов
/ 19 января 2011

Мне нужно позвонить в веб-сервис 5 раз (так как есть 5 различных параметров) по одному или все сразу. После завершения определенного вызова в фоновом режиме текстовое представление должно быть обновлено следующим текстом: «1-й завершен», «2-й завершен» и т. Д.

Значение TextView должно обновляться в фоновом режиме.

Что мне делать? Я знаю концепцию AsyncTask, но я запутался, что я должен написать 5 AsyncTask, а затем для каждого я пишу метод execute () для выполнения AsyncTask?

Я успешен только для одного вызова, так как я установил «1-е выполнено» в методе postExecute (). Но запутался за 5 раз звонить.

Пожалуйста, предложите мне лучший способ или точное решение.

1 Ответ

11 голосов
/ 19 января 2011

Вам нужен только 1 AsyncTask, вам нужно сделать все 5 вызовов в doInBackground(), и каждый раз, когда вы завершаете один вызов, 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");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...