如何将预先实例化的回调转换为Observable

时间:2019-07-17 17:02:14

标签: java rx-java

我对RxJava还是很陌生,我对如何将回调包装到Observable中有基本的了解,但是当回调/侦听器已预先设置好实例时,我遇到的困难是这样做的。我发现的每个示例仅显示将回调直接实例化到正在创建的Observable中。

一些我正在谈论的示例代码。我正在使用这样的Api:

public class Api {
    private ApiCallback callback;

    void initialize(ApiCallback callback){
        this.callback = callback;
    }

    void doAction1(){
        this.callback.onAction1Complete();
    }
}

interface ApiCallback {
    void onInitialized();

    void onAction1Complete();
}

使用真正的api时,我无法控制它的工作方式,因此我必须在这种状态下使用它。在尝试使用可观察对象与该Api一起工作时,这是我遇到的困难。我有一个包含Api对象的成员变量:

private Api mApi = new Api();

现在为了初始化它,我似乎有两个选择之一。

选项1:

    Completable startApi() {
        return Completable.create(new CompletableOnSubscribe() {
            @Override
            public void subscribe(final CompletableEmitter emitter) throws Exception {
                mApi.initialize(new ApiCallback() {
                    @Override
                    public void onInitialized() {
                        emitter.onComplete();
                    }

                    @Override
                    public void onAction1Complete() {

                    }

                });
            }
        });
    }

选项2:

    private ApiCallback premadeCallback = new ApiCallback() {
        @Override
        public void onInitialized() {
        }

        @Override
        public void onAction1Complete() {
        }
    };

    Completable startApi() {
        return Completable.create(new CompletableOnSubscribe() {
            @Override
            public void subscribe(final CompletableEmitter emitter) throws Exception {
                mApi.initialize(premadeCallback);
            }
        });
    }

现在的问题是,当我需要知道何时从Api调用中调用回调中的其他方法时,选项2对我而言更有意义。但是根据我对RxJava的理解,我不明白如何使用像这样工作的Api来达到这些方法调用。

例如:

    Completable doAction1() {
        return Completable.create(new CompletableOnSubscribe() {
            @Override
            public void subscribe(final CompletableEmitter emitter) throws Exception {
                // Api is already initialized with callback
                // How do I reach the callback from here?
            }
        });
    }

我目前唯一想到的是如何创建一个成员变量作为发射器(或发射器字典),然后在需要时在api回调中调用其适当的方法。我对此表示关注。A.我不确定RxJava是否可以以这种方式工作B.这听起来像一个可怕的主意。

0 个答案:

没有答案