AsyncTasks でコールバックを使用する方法を理解しようとしています。これは、タスクから更新する方法の標準のように思われるためです...問題は、オンラインのリソースがそれについて話すのではなく、「これをやればうまくいく」と言います。
私が持っているものについて話し合うつもりです.誰かが私がどこで間違っているのか/正確に何をすべきかを教えてくれたら、私はそれを感謝します.
OnTaskCompleted
私はそれ自身のファイルで呼び出されるインターフェースを持っています:
OnTaskCompleted:
package com.example;
public interface OnTaskCompleted{
void onTaskCompleted(boolean result);
}
次に、いくつかのメソッドを含む別のタスクと、私のAsyncTask
:
接続ユーティリティ:
public class ConnectUtils implements OnTaskCompleted {
private boolean hasConnected, hasChecked;
public boolean isConnected(Context parent, String url){
hasChecked = false;
new CheckURL(parent, new OnTaskCompleted(){
@Override
public void onTaskCompleted(boolean result) {
// TODO Auto-generated method stub
}}, url).execute();
while(!hasChecked){ Log.i("Checked?", hasChecked + ""); }
return hasConnected;
}
private class CheckURL extends AsyncTask<Void, Void, Boolean>{
private Context parent;
private OnTaskCompleted listener;
private String url;
public CheckURL(Context parent, OnTaskCompleted listener, String url){
this.parent = parent;
this.listener = listener;
this.url = url;
}
@Override
protected Boolean doInBackground(Void... params){
// Do some stuff and return a boolean
}
@Override
protected void onPostExecute(Boolean result){
super.onPostExecute(result);
listener.onTaskCompleted(result);
}
}
@Override
public void onTaskCompleted(boolean result) {
Log.i("Completed", result + "");
hasConnected = result;
hasChecked = true;
}
}
私が期待しているのは、AsynTask からの結果がない間にwhile
inが実行され、Task が終了すると true に設定され、while ループが停止することです。isConnected()
hasChecked
私が見ているのは、ループが無限に続き、常に false をログに記録しているため、hasChecked
更新されていないということです。
どこで、なぜ私が間違っているのか、誰でも説明できますか?
おそらく、このコード内ではなく、コールバックが一般的にどのように機能するかに関心があることに注意してください (ただし、このコードを使用して説明します)。これは単なるコード例です。