如何从方法中的内部接口返回值?

时间:2016-05-10 11:47:30

标签: java android interface

我声明了这两个方法:

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设置它,但似乎这不起作用。

我怎样才能成功? 提前谢谢!

3 个答案:

答案 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);};