Android 将回调转换为RxJava可观察对象
刚开始玩RxJava,所以我对它完全是个新手 我对以下问题的正确方法或任何可能的解决方案有疑问。我在谷歌上搜索了很多,但我似乎没有找到任何合适的解决方案,只是一般的想法 我有一个做一些工作的类,它有自己的接口,让我们把它命名为AClass。现在有一个BClass实现了前面提到的接口。在BClass的onActivityResult上,如果requestCode与我们提供的请求代码匹配,那么AClass将调用aclasInstance.handleActivityResult(..)并执行一些操作。然后,它使用其接口进行报告 有人会如何使用RxJava可观测数据来实现这一点 我目前唯一的尝试是将handleActivityResult(..)转换为一个可观察对象,然后实现一个观察者接口,并在BClass的重写onActivityResult中实例化一个订阅对象,这显然是一个活动。但在实例化之前,我需要检查订阅是否为null或取消订阅,这将导致只实例化一次订阅,然后观察者停止接收任何其他对象 我还阅读了关于RxBus实现的文章。我不太确定这是否是一个好方法,因为它让我对主题有点困惑Android 将回调转换为RxJava可观察对象,android,rx-java,rx-android,Android,Rx Java,Rx Android,刚开始玩RxJava,所以我对它完全是个新手 我对以下问题的正确方法或任何可能的解决方案有疑问。我在谷歌上搜索了很多,但我似乎没有找到任何合适的解决方案,只是一般的想法 我有一个做一些工作的类,它有自己的接口,让我们把它命名为AClass。现在有一个BClass实现了前面提到的接口。在BClass的onActivityResult上,如果requestCode与我们提供的请求代码匹配,那么AClass将调用aclasInstance.handleActivityResult(..)并执行一些操作
提前非常感谢您提供的任何见解。:) 我真的不知道你真正想要什么,但是试着帮助你。 我说得对吗?你的班级有什么需要知道的,班级的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的这个。希望它能帮助你。