2015-12-02 146 views
2

刚开始搞乱RxJava,所以我是一个新手。将回调转换为RxJava Observables

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

我有一个班级做了一些工作,并有自己的界面,让我们将其命名为AClass。现在有一个BClass实现了前面提到的接口。在onActivityResult的BClass,如果requestCode我们提供调用aClassInstance.handleActivityResult(..)和做一些事情的请求的代码,那么ACLASS匹配。然后使用其界面报告。

有人会用RxJava Observables来解决这个问题吗?

我只能尽量此刻正到handleActivityResult(..)转变成一个可观察然后实施观察接口和在BClass这显然是overrided onActivityResult实例化一个对象申购一个活动。但是,我需要在实例化之前检查订阅是否为空或取消订阅,因此仅实例化订阅一次,然后Observer停止接收更多对象。

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

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

回答

0

我真的不知道你真正想要什么,但试图帮助你。 我能帮到你吗?你的类AClassInstance知道什么时候BClass的onActivityResult发生了?如果所有这些都是这样,你就不必两个类都实现“A接口”。你只需要在“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中运行这个,你会看到输出的“Hello requestCode = 444”。所以,一切正常,你会得到你的回调。

+0

AClass定义了BClass必须实现的接口。然后BClass在做一些工作之后调用aClassInstance.handleActivityResult()和AClass,必须通过该接口将结果报告给BClass。那些可以被RxJava替代的东西,还是接口是唯一的方法呢? – Pavlos

+0

是的,你可以用RxJava来创建类似热门观察者的东西[很好的例子,但不是Java](http://www.introtorx.com/content/v1.0.10621.0/14_HotAndColdObservables.html) 更方便的方式,我认为 - 使用RxBus。查看Kaushik Gopal的这篇[不错的文章](http://nerds.weddingpartyapp.com/tech/2014/12/24/implementing-an-event-bus-with-rxjava-rxbus/)。希望它能帮助你。 –