不理解RxJava MaybeObserver(聊天通知不起作用)
我对Java、android和Rxjava非常陌生。我最近注意到,在一个现有的项目(不是我写的)中,应该收到的聊天通知没有收到。于是我开始做一些追踪。下面是代码的一部分 注意:确实收到的通知似乎总是转到文件不理解RxJava MaybeObserver(聊天通知不起作用),java,android,rx-java,Java,Android,Rx Java,我对Java、android和Rxjava非常陌生。我最近注意到,在一个现有的项目(不是我写的)中,应该收到的聊天通知没有收到。于是我开始做一些追踪。下面是代码的一部分 注意:确实收到的通知似乎总是转到文件FCMServices 我在下面的代码中几乎到处都放了断点。我注意到的是,我没有收到成功时发出的通知,onSuccess和onError没有被调用,但是onComplete会被调用。然而,我发现这很奇怪,因为我认为在onComplete之前必须调用onSuccess或onError 我对这些功
FCMServices
我在下面的代码中几乎到处都放了断点。我注意到的是,我没有收到成功时发出的通知,onSuccess
和onError
没有被调用,但是onComplete
会被调用。然而,我发现这很奇怪,因为我认为在onComplete
之前必须调用onSuccess
或onError
我对这些功能的理解是基于
在maybeveplatmapbiselector
类中,onSuccess
依次调用了该函数。(我相信也是一个reactivex.io类)
这原来是来自MaybeObserver
界面
我的问题是
TestObserver
和maybelapmabiselector
的onSuccess
到底在做什么?如果基于我提供的信息,甚至是可能的话,为什么有些通知会转到onComplete
,而没有转到onSuccess
或onError
中的FCMServices.java
您是否尝试过注释currentChatDisposable.dispose()代码>?不久前,我也遇到过同样的问题,我过早地处理了我的一次性用品,并且没有显示任何数据
通常在生命周期的onPause()
或onDestroy()
时调用.dispose()
PS:如果您不知道,RxJava中的可能会返回一个值,完全不返回,或者返回一个异常。谢谢您的回答。我尝试了你的建议,但仍然没有聊天通知。创建通知的唯一点是在onSuccess
中。由于断点从未停止在那里,我认为这是一个问题。只是不知道为什么有时会这样,而在其他情况下则不会。谢谢你对的解释,也许
,多年来一直在做这方面的研究。你查过改装电话的答案了吗?是200吗?您期望的对象是否已成功解析?Rxjava可能会做出这样的反应,因为您的API调用中出现了错误。您可能需要添加okhttp日志拦截器,以查看发送的内容和接收的内容。正如您链接状态的MaybeObserver文档一样,它在onSuccess之后永远不会调用onComplete。您在非测试代码中使用TestObserver继承的代码也是这样吗?不应该。TestObserver::onSuccess实现将协议转换为Observable,以便可以使用相同的TestObserver类测试Maybes、Singles和Completable。您还可以参考maybeflatmappis选择器。代码是否未显示使用两个arg平面图?
//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();
}
});
//TestObserver.java
@Override
public void onSuccess(T value) {
onNext(value);
onComplete();
}
//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);
}