我正在尝试在 AsyncTasks 中使用回调,因为它似乎是如何从任务更新的标准......问题是我似乎无法让它工作,因为在线资源似乎是说“这样做,它会起作用”,而不是通过它说话。
我将讨论我所拥有的,如果有人能告诉我哪里出了问题/我应该做什么,我将不胜感激。
我有一个OnTaskCompleted
在它自己的文件中调用的接口:
OnTask已完成:
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;
}
}
我期望看到的是while
inisConnected()
运行,而我们没有从 AsynTask 获得结果,并且一旦 Task 完成hasChecked
设置为 true,然后停止 while 循环。
不过,我看到的是循环无限地继续,只是不断地记录错误,所以hasChecked
没有被更新。
谁能解释我可能出错的地方和原因?
我可能应该注意,我对回调的一般工作方式而不是在这段代码中更感兴趣(尽管使用这段代码来解释)。这只是示例代码。