我对 Java、android 和 Rxjava 很陌生。我最近注意到,在现有项目(不是我编写的)中,没有收到应该收到的聊天通知。于是我开始做一些追踪工作。下面是部分代码。
注意:收到的通知似乎总是转到文件 FCMServices
中的 onSuccess
我在下面的代码中几乎到处都放置了断点。我注意到的是,我没有收到 onSuccess
的通知,并且 onError
没有被调用,但 onComplete
却被调用。但是我觉得很奇怪,因为我认为必须在 onComplete
之前调用 onSuccess
或 onError
。
我对这些函数的理解是基于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
的调用位置,发现它是由 TestObserver
类中的另一个 onSuccess
调用的reactivex.io
http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/observers/TestObserver.html
//TestObserver.java
@Override
public void onSuccess(T value) {
onNext(value);
onComplete();
}
它又被 MaybeFlatMapBiSelector
类中的 onSuccess
调用。 (我相信也是一个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--
我的问题是 TestObserver
和 MaybeFlatMapBiSelector
的 onSuccess
到底在做什么?如果根据我提供的信息甚至有可能,为什么有些通知会转到 onComplete
而不会转到 onSuccess
或 onError
在FCMServices.java
最佳答案
您是否尝试过评论 currentChatDisposable.dispose();
?不久前我也遇到了同样的问题,我过早地处理了我的一次性用品,并且没有数据显示
通常在生命周期的 onPause()
或 onDestroy()
时调用 .dispose()
PS:如果您不知道 RxJava 中的也许
要么返回单个值,要么什么也不返回,或者返回一个异常。
关于java - 不理解 RxJava MaybeObserver (聊天通知不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59936023/