不了解RxJava MaybeObserver(聊天通知不起作用)



我对Java,android和Rxjava很陌生。我最近注意到,在一个现有项目(不是我写的(中,没有收到应该收到的聊天通知。因此,我开始做一些追踪。下面是代码的一部分。

注意:收到的通知似乎总是转到文件FCMServices中的onSuccess

我在下面的代码中几乎在所有地方都放置了断点。我注意到的是我没有收到onSuccess的通知,onError没有被打电话,但onComplete被召唤了。但是我觉得这很奇怪,因为我认为无论是onSuccess还是onError都必须在onComplete之前打电话。

我对这些功能的理解是基于 http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/MaybeObserver.html

//FCMService.java
currentConversationRepo.getCurrentConversation()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new MaybeObserver<CurrentConversation>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
currentChatDisposable = d;
}
@Override
public void onSuccess(@NonNull CurrentConversation currentConversation) {
System.out.println("This is SUCCESS");
if (channelSid == null && author == null && usedAdId == null){
buildNotifyNotification(body, action, "", userId);
}
if (channelSid != null && author != null) {
if (!channelSid.equals(currentConversation.getChannelSid())) {
createChatNotification(author, channelSid, body);
}
}
currentChatDisposable.dispose();
}
@Override
public void onError(@NonNull Throwable e) {
System.out.println("Error getting current conversation: " + e.getMessage());
currentChatDisposable.dispose();
}
@Override
public void onComplete() {
System.out.println("This is onComplete");
currentChatDisposable.dispose();
}
});

然后,我开始跟踪onComplete被调用的位置,并且似乎它是由reactivex.io中班级TestObserver的另一个onSuccess调用

的http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/observers/TestObserver.html

//TestObserver.java
@Override
public void onSuccess(T value) {
onNext(value);
onComplete();
}

这反过来又被onSuccessMaybeFlatMapBiSelector班上叫的。 (我相信这也是一个 reactivex.io 班(

//MaybeFlatMapBiSSelector.java
@Override
public void onSuccess(U value) {
T t = this.value;
this.value = null;
R r;
try {
r = ObjectHelper.requireNonNull(resultSelector.apply(t, value), "The resultSelector returned a null value");
} catch (Throwable ex) {
Exceptions.throwIfFatal(ex);
actual.onError(ex);
return;
}
actual.onSuccess(r);
}

原来这是来自MaybeObserver界面

http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/MaybeObserver.html#onComplete--

我的问题是,TestObserverMaybeFlatMapBiSelectoronSuccess到底在做什么?如果根据我提供的信息甚至可以,为什么有些通知会转到onComplete而不onSuccessonErrorFCMServices.java

你有没有试过currentChatDisposable.dispose();评论?不久前我遇到了同样的问题,我过早地处理了我的一次性用品,并且没有数据显示

通常在生命周期onPause()onDestroy()时调用.dispose()

PS:如果您不知道RxJava中的Maybe返回单个值,则什么都没有或异常。

最新更新