AsyncTask
を再びonPostExecute
から開始することは恐ろしい考えです。あなたはUIの更新と共にネットワークコールのために5回のように再帰的にやりたいので、AsyncTask
コールを追跡するためのインターフェイスを保つことを提案したいと思います。
ここでは、その動作をどのように達成できるかについての例を示します。このようにinterface
を作成することができます。
public interface MyResponseListener {
void myResponseReceiver(String result);
}
これで、AsyncTask
クラスにインターフェイスが宣言されました。したがって、AsyncTask
は次のようになります。
public class YourAsyncTask extends AsyncTask<Void, Void, String> {
// Declare an interface
public MyResponseListener myResponse;
// Now in your onPostExecute
@Override
protected void onPostExecute(final String result) {
// Send something back to the calling Activity like this to let it know the AsyncTask has finished.
myResponse.myResponseReceiver(result);
}
}
今、あなたはinterface
あなたはこのようなあなたのActivity
ですでに作成したを実装する必要があります。 Activity
public class MainActivity extends Activity implements MyResponseListener {
// Your onCreate and other function goes here
// Declare an AsyncTask variable first
private YourAsyncTask mYourAsyncTask;
// Here's a function to start the AsyncTask
private startAsyncTask(){
mYourAsyncTask.myResponse = this;
// Now start the AsyncTask
mYourAsyncTask.execute();
}
// You need to implement the function of your interface
@Override
public void myResponseReceiver(String result) {
if(!result.equals("5")) {
// You need to keep track here how many times the AsyncTask has been executed.
startAsyncTask();
}
}
}
なぜあなたはそれをしたいのですか?
AsyncTask
にインターフェイスのリファレンスを渡す必要がありますか? –doInBackgroundがネットワークタスクを実行するために実行され、doInBackgroundが完了した後にdoInBackgroundの後にonPostExecuteが実行されてUIが変更されます。 –
これは再帰的に(ネットワークタスクとUIの更新) onPostexecuteからのdoInbackground @ArjunIssar、@ masked man –