java—如何在方法中从内部接口返回值?

ma8fv8wu  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(451)

我声明了这两种方法:

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;
}

我在异步任务执行时使用接口。我的问题是,我想把onresult方法的result对象作为一个对象返回给getresult()方法。
如上所示,我试图通过setter设置它,但似乎这不起作用。
我怎样才能成功呢?提前谢谢!

fiei3ece

fiei3ece1#

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);};
klsxnrf1

klsxnrf12#

你有两个选择。坏的是等到新线程完成。我们不要这样做)。更好的方法是使用回调:

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();
}
n9vozmp4

n9vozmp43#

你可以提供一个 OnResultListener 作为您的 AsyncTask ,调用者必须实现。例如

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;
}

或者你可以直接提供 mListenernew Executor

相关问题