我声明了这两个方法:
private Result mResult;
private void setResult(Result result){
this.mResult = result;
}
private Result getResult(){
new Executor(new OnResultListener() {
@Override
public void onResult(Result result) {
setResult(result);
}
}).execute();
return mResult;
}
我正在执行AsyncTask时使用接口。我的问题是,我想将 onResult 方法的Result对象作为对象返回到 getResult()方法。
如上所示,我尝试通过setter设置它,但似乎这不起作用。
我怎样才能成功? 提前谢谢!
答案 0 :(得分:2)
这里有两种选择。糟糕的是要等到新线程完成。我们不这样做)。更好的方法是使用回调:
public static interface OnResultCallback {
void onResult(Result result);
}
private void getResult(final OnResultCallback callback){
new Executor(new OnResultListener() {
@Override
public void onResult(Result result) {
setResult(result);
callback.onResult(result);
}
}).execute();
}
答案 1 :(得分:1)
您可以提供OnResultListener
的实例作为AsyncTask
的构造函数的一部分,调用者必须实现该实例。 E.g。
private Result mResult;
private OnResultListener mListener;
private void setResult(Result result, OnResultListener listener){
this.mResult = result;
mListener = listener;
}
private Result getResult(){
new Executor(new OnResultListener() {
@Override
public void onResult(Result result) {
if (mListener != null) {
mListener.onResult(result);
}
setResult(result);
}
}).execute();
return mResult;
}
或者您可以直接向mListener
new Executor
答案 2 :(得分:0)
public class CustomOnResultListener extends OnResultListener{
Callback callback ;
public CustomOnResultListener(Callback callback){}
this.callback =callback; // use this callback to send result
}
public interface Callback{public void onCallback(Result result);};