2015-12-02 112 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/)。希望它能幫助你。 –