2011-01-19 9 views
2

Webサービスへの呼び出しを5回(5つの異なるパラメータがあるため)、順番に行う必要があります。特定の通話が完了したら、バックグラウンドでテキストビューを「第1完了」、「第2完了」などのテキストで更新する必要があります。Android - AsyncTaskの問題

TextViewの値をバックグラウンドで更新する必要があります。

どうすればよいですか?私はAsyncTaskのコンセプトを知っているが、私は5 AsyncTaskを書く必要があり、それぞれ私はAsyncTaskを実行するexecute()メソッドを記述する必要が混乱している?

私はpostExecute()メソッドで "first completed"を設定したので、1回の呼び出しで成功しました。しかし、5回の呼び出しのために混乱。

私には良い方法や正確な解決策を提案してください。

+0

、1つのAsyncTaskは5つの非同期タスクオブジェクトを作成し、それらを実行し、非同期タスクのTextViewのポストの実行を更新するために使用することができます。 –

答えて

11

あなたが唯一の1 AsyncTaskを必要とする、あなたは完全なものをdoInBackground()内のすべての5つの呼び出しを行う必要があると毎回あなたたとえば完了呼の数を渡すpublishProgressを呼び出し、そして、最後にあなたがonPostExecuteに必要なものは何でも。

簡単な方法:WebServiceが5回のコールに対して同じ型のパラメータを取る場合

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"); 
    } 
} 
+0

@ maid450この方法をチェックして実装しましょう。 Thanx Thanx Thanx Thanxを使用して簡単にサポートできます。 –

+0

私はそれを即座に書きましたが、私はすぐにそれをテストすることができないので、おそらく小さな文法の間違いがあります。問題がある場合は私に知らせてください。 – maid450

+0

@ maid450 Thanxはコードのためにたくさんあります。 onPreExecute()の.show()メソッドと私はonPostExecute()メソッドにProgressbar.dismiss()メソッドを書いています。これは、onPostExecute()メソッドの下に黄色の線を表示しています(ローカルでは使用されないことを示しています)。なぜProgressBarは閉じられていないと思いますか? –