Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将回调转换为RxJava可观察对象_Android_Rx Java_Rx Android - Fatal编程技术网

Android 将回调转换为RxJava可观察对象

Android 将回调转换为RxJava可观察对象,android,rx-java,rx-android,Android,Rx Java,Rx Android,刚开始玩RxJava,所以我对它完全是个新手 我对以下问题的正确方法或任何可能的解决方案有疑问。我在谷歌上搜索了很多,但我似乎没有找到任何合适的解决方案,只是一般的想法 我有一个做一些工作的类,它有自己的接口,让我们把它命名为AClass。现在有一个BClass实现了前面提到的接口。在BClass的onActivityResult上,如果requestCode与我们提供的请求代码匹配,那么AClass将调用aclasInstance.handleActivityResult(..)并执行一些操作

刚开始玩RxJava,所以我对它完全是个新手

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

我有一个做一些工作的类,它有自己的接口,让我们把它命名为AClass。现在有一个BClass实现了前面提到的接口。在BClass的onActivityResult上,如果requestCode与我们提供的请求代码匹配,那么AClass将调用aclasInstance.handleActivityResult(..)并执行一些操作。然后,它使用其接口进行报告

有人会如何使用RxJava可观测数据来实现这一点

我目前唯一的尝试是将handleActivityResult(..)转换为一个可观察对象,然后实现一个观察者接口,并在BClass的重写onActivityResult中实例化一个订阅对象,这显然是一个活动。但在实例化之前,我需要检查订阅是否为null或取消订阅,这将导致只实例化一次订阅,然后观察者停止接收任何其他对象

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


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

我真的不知道你真正想要什么,但是试着帮助你。 我说得对吗?你的班级有什么需要知道的,班级的onActivityResult什么时候发生的?如果大家都这么认为,那么就不必两个类都实现“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);
    }
  }
}
导入接收。可观察;
公开课示例观察员{
公共静态void main(字符串[]args){
CallbackReceiver=新的CallbackReceiver();
ActivityProducer活动=新建ActivityProducer();
activity.setListener(接收方);
activity.onActivityResult(444,0);
}
}
类CallbackReceiver实现ActivityProducer.RequestCodeProducer{
@重写公共void handleActivityResult(可观察请求可观察){
requestObservable.map(it->{
System.out.println(“在这里你可以用你的“+it+”号码做一些额外的事情…”);
归还它;
}).subscribe(res->System.out.println(“Hello requestCode=“+res”);
}
}
类活动生产者{
接口请求代码生成器{
void handleActivityResult(可观察的请求代码);
}
私有请求代码监听器;
公共void setListener(RequestCodeProducer侦听器){
this.listener=listener;
}
/*
* . . . . . . .. .. . . .
*你的活动方法
* */
activityresult上的公共void(int-requestCode,int-resultCode/*,Intent-data*/){
//super.onActivityResult();
Observable-Observable=Observable.defer(()->Observable.just(requestCode));
if(侦听器!=null){
listener.handleActivityResult(可观察);
}
}
}

如果您在IDE中运行此命令,您将看到输出“Hello requestCode=444”。所以,一切正常,您可以得到回调。

AClass定义了一个BClass必须实现的接口。然后,BClass调用aclasInstance.handleActivityResult(),AClass在完成一些工作后,必须通过该接口向BClass报告结果。这是可以被RxJava替代的东西,还是接口是唯一的解决方法?是的,你可以用RxJava创建一些类似热观察器的东西,我认为更方便的方法——使用RxBus。检查一下Kaushik Gopal的这个。希望它能帮助你。