完成异步操作后从函数返回

时间:2018-12-17 13:42:58

标签: java android rx-java

我正在尝试使用一个现有的类,该类以回调的形式返回数据。通话就像这样-

class Validator{
  validate(){
     DataProvider.getInstance(new DataListener(){
       @Override
       void onDataReady(String data){
          //Do something with data
       }
   });
  }

return //data when the above call is finished
}

我想要一种干净的方法来返回异步调用完成时应返回的数据。放置while循环并检查数据是一种明显但不干净的方法。我可以使用RxJava来实现吗?

注意:验证函数可以在调用耗时的情况下等待

2 个答案:

答案 0 :(得分:1)

就个人而言,RxJava过于矫kill过正。您需要做的就是将延续函数作为参数传递

class Validator {
    void validate(DataListener dl){
        DataProvider.getInstance(dl);
    }

现在,无论您在哪里调用此方法,都请放入new DataListener中。不要将validate()的结果分配给变量

答案 1 :(得分:0)

如果您不想使用RxJava,并且只想从validate方法返回一个值,则可以通过创建一个接口来实现:

public interface ResultsListener{

  public void onResult(String data);
  public void onFailed();

}

public void validate(ResultListener callback){
     DataProvider.getInstance(new DataListener(){
       @Override
       void onDataReady(String data){
          //Do something with data
          callback.onResult(data);
       }
   });
  }

当您调用validate()时,您可以执行以下操作:

    validate(new ResultsListener() {
      @override
      void onResult(String valid) {
        // Do something with the returned data
      }

      @override
      void onFailed() {
        // something failed
      }

   });

希望这会有所帮助!