我正在使用第三方库,我试图使用RxJava进行封装,以便可以通过RxJava实用程序向应用程序代码公开第三方库的功能。使用RxJava主题进行回调包装
获得第三方库实例后,它需要设置一个回调函数,以便在对库进行调用并完成它所需的任何操作时,它可以回调设置的回调函数Object
来通知它已经完成了它所做的任何应用程序。
我认为这对Subject
很好用,但我不能确定这是实施它的正确方法。当Wrapper
类的doFirstThing
方法被调用时,Wrapper
类调用Subject
的方法并设置一个新的Action0
Object
,当被调用时,对第三方库进行适当的方法调用。
当第三方库完成了它所做的任何事情之后,它会在回调Object
上设置的Wrapper
类中调用适当的方法。在设置的回调方法中,Wrapper
使用传递给回调方法的值调用Subject
的onNext
方法。
这是实现此类功能的正确方法吗?
public class Wrapper {
private final ThirdPartyLibrary mThirdPartyLibrary;
private final Subject<Boolean, Boolean> mCallbackSubject;
public Wrapper() {
mThirdPartyLibrary = ThirdPartyLibrary.getInstance();
mThirdPartyLibrary.setCallback(new WrapperThirdPartyCallback())
mCallbackSubject = new SerializedSubject<>(PublishSubject.<Boolean>create());
}
@Override
public Observable<Boolean> doFirstThing() {
return mConfigureSubject.doOnSubscribe(new Action0() {
@Override
public void call() {
mThirdPartyLibrary.doFirstThing();
}
});
}
public class WrapperThirdPartyCallback implements ThirdPartyCallback {
@Override
public void doOneThingComplete(boolean success) {
mCallbackSubject.onNext(success);
}
}
}
在http://codereview.stackexchange.com/上问这样的问题会更好。 StackOVerflow适用于问题,而不是评论。 – ursa
本质上,问题出在哪里,正如@akarnokd所说的,是“启动”流程的'doOnSubscribe'方法调用。 – anthonylawson