将回调转换为RxJava Observables

时间:2015-12-02 20:17:18

标签: android rx-java rx-android

刚开始搞乱RxJava,所以我就是新手。

我对以下问题的正确方法或任何可能的解决方案有疑问。我在Google上搜索了很多,但我似乎没有找到任何合适的解决方案,只是一般的想法。

我有一个类可以完成一些工作并拥有自己的界面,让我们将其命名为 AClass 。现在有一个实现前面提到的接口的BClass。在 BClass onActivityResult 上,如果requestCode与我们提供的请求代码匹配,则 AClass 调用 aClassInstance.handleActivityResult(.. )并做一些事情。然后它使用其界面报告。

有人会如何使用RxJava Observables来解决这个问题?

我目前唯一的尝试是将 handleActivityResult(..)转换为 Observable ,然后实现 Observer 接口并实例化覆盖在 BClass 的onActivityResult中的订阅对象,显然是 Activity 。但是我需要在实例化之前检查订阅是空还是取消订阅,这样结果只实例化订阅一次,然后Observer停止接收更多对象。

我还阅读了有关 RxBus 的实现。我不太确定这是否是一个好方法,因为它让我对主题有点困惑。

非常感谢您提供的任何见解。 :)

1 个答案:

答案 0 :(得分:0)

我真的不知道你真正想要什么,但试着帮助你。 我告诉你了吗?当你的BClass的onActivityResult发生时,你的班级AClassInstance想知道吗?如果都是这样,你就不必实施" Ainterface"两个班级。你只需要听听" onActivityResult"会发生:

import rx.Observable;


public class ExampleObservers {

  public static void main(String[] args) {
    CallbackReceiver receiver = new CallbackReceiver();
    ActivityProducer activity = new ActivityProducer();
    activity.setListener(receiver);
    activity.onActivityResult(444, 0);
  }
}

class CallbackReceiver implements ActivityProducer.RequestCodeProducer {

  @Override public void handleActivityResult(Observable<Integer> requestObservable) {
    requestObservable.map(it -> {
      System.out.println("here U can do some extra things with your " + it + " number ...");
      return it;
    }).subscribe(res -> System.out.println("Hello requestCode = " + res));
  }
}

class ActivityProducer {
  interface RequestCodeProducer {
    void handleActivityResult(Observable<Integer> requestCode);
  }

  private RequestCodeProducer listener;

  public void setListener(RequestCodeProducer listener) {
    this.listener = listener;
  }

  /*
  * . . . . . . .. .. . . .
  * Your activity`s methods
  * */

  public void onActivityResult(int requestCode, int resultCode/*, Intent data*/) {
    //super.onActivityResult();
    Observable<Integer> observable = Observable.defer(() -> Observable.just(requestCode));

    if (listener != null) {
      listener.handleActivityResult(observable);
    }
  }
}

如果在IDE中运行此命令,您将看到输出&#34; Hello requestCode = 444&#34;。所以,一切正常,你得到回调。