gpt4 book ai didi

java - 不理解 RxJava MaybeObserver (聊天通知不起作用)

转载 作者:行者123 更新时间:2023-12-02 09:04:23 25 4
gpt4 key购买 nike

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

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

我在下面的代码中几乎到处都放置了断点。我注意到的是,我没有收到 onSuccess 的通知,并且 onError 没有被调用,但 onComplete 却被调用。但是我觉得很奇怪,因为我认为必须在 onComplete 之前调用 onSuccessonError

我对这些函数的理解是基于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--

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

最佳答案

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

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

PS:如果您不知道 RxJava 中的也许要么返回单个值,要么什么也不返回,或者返回一个异常。

关于java - 不理解 RxJava MaybeObserver (聊天通知不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59936023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com