我对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.这听起来像一个可怕的主意。