サーバーとの間で http メッセージを送受信する必要がある Android プロジェクト (API レベル 10) に取り組んでいます。
httpリクエストごとに1つずつ異なるメソッドを提供する NetworkManager という名前のクラスを実装しました(例: loginRequest(user pass)、RegistrationRequest(user.....) )。
これらのメソッドはすべて、sendMessage というメソッドに渡される JSON オブジェクトを生成します。このメソッドは、実際に接続を確立し、応答を送受信します (これも json オブジェクト)。
もちろん、ネットワーク呼び出しには時間がかかるため、最初に AsyncTask を使用して、ネットワーク操作の実行中に progressDialog を表示することにしました。
問題は、メイン スレッドによって実行された結果自体を含む他の操作を実行する前に、バックグラウンド スレッドから取得した応答値を取得する必要があることです。同時に、AsyncTask の一般的で再利用可能な実装を作成したいと考えています。
例: 2 つの EditText (ユーザー名、パスワード) と [ログイン] というボタンを表示するログイン アクティビティがあります。ログイン ボタンを押すと、progressDialog が表示され、doInBackground タスクが完了したら破棄する必要があります。もちろん、私はこのようにすることができます:
onClick(View v) //called when the login button is pressed
{
onPreExecute()
{
//Show the progress dialog
}
doInBackground()
{
//Retreive the login response (an integer containing a message code) using sendLoginRequest(username, password);
//return the response
}
onPostExecute(int response)
{
//Dispose the progress dialog, then loginSucessfull ? start new activity : show error toast
}
}
しかし、このようにして、送信する必要があるすべてのリクエストに対して非同期タスクを実装する必要があります。これは避けたいことです。N 個のリクエストがある場合、AsyncTask を拡張する N 個のクラスを作成する必要があるためです。
ありがとうございました!