gpt4 book ai didi

java - 当我在 FlowableOnSubscribe 类中调用 onNext 时,订阅者的 onNext 和 onComplete 函数不运行

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:54:57 25 4
gpt4 key购买 nike

在一个使用 RxJava 2 的 Android 项目中,我在初始 Activity 的 onCreate 中创建了一个像这样的 Flowable:

Flowable.create(new MyFlowableOnSubscribe1(), BackpressureStrategy.BUFFER)
.doOnComplete(new MyAction())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new MySubscriber());

FlowableOnSubscribe 的实现是:

public class MyFlowableOnSubscribe1 implements FlowableOnSubscribe<String> {
public static final String TAG = "XX MyFlOnSub1";

@Override
public void subscribe(FlowableEmitter<String> emitter) {
Log.i(TAG, "subscribe");

emitter.onNext("hello");
emitter.onComplete();
}
}

这是订阅者实现:

public class MySubscriber implements Subscriber<String> {
public static final String TAG = "XX MySubscriber";

@Override
public void onSubscribe(Subscription s) {
Log.i(TAG, "onSubscribe");
}

@Override
public void onComplete() {
Log.i(TAG, "onComplete");
}

@Override
public void onError(Throwable e) {
Log.i(TAG, "onError");
}

@Override
public void onNext(String s) {
Log.i(TAG, "onNext: " + s);
}
}

Action 实现是:

public class MyAction implements Action {
public static final String TAG = "XX MyAction";

@Override
public void run() {
Log.i(TAG, "run");
}
}

在我的输出中,我期待来自 onNext 的日志语句,但我没有看到。相反,这是我的全部输出:

02-23 17:56:31.334 24176-24176/com.ebelinski.rxjavaexperimentproject I/XX MySubscriber: onSubscribe
02-23 17:56:31.334 24176-24219/com.ebelinski.rxjavaexperimentproject I/XX MyFlOnSub1: subscribe
02-23 17:56:31.334 24176-24219/com.ebelinski.rxjavaexperimentproject I/XX MyAction: run

这表明 onNext 永远不会运行,onComplete 甚至也不会运行。但是 MyAction 运行成功。

以下是我注释掉对 onNext 的调用时发生的情况:

02-23 17:58:31.572 24176-24176/com.ebelinski.rxjavaexperimentproject I/XX MySubscriber: onSubscribe
02-23 17:58:31.572 24176-26715/com.ebelinski.rxjavaexperimentproject I/XX MyFlOnSub1: subscribe
02-23 17:58:31.572 24176-26715/com.ebelinski.rxjavaexperimentproject I/XX MyAction: run
02-23 17:58:31.652 24176-24176/com.ebelinski.rxjavaexperimentproject I/XX MySubscriber: onComplete

在这种情况下 onNext 当然不会运行,但至少 onComplete 会运行。

我预计我会看到 onComplete 在这两种情况下运行,并且 onNext 在我调用 emitter.onNext 时运行。我在这里做错了什么?

最佳答案

您需要手动发出请求,否则在直接扩展 Subscriber 时不会发出任何数据:

@Override
public void onSubscribe(Subscription s) {
Log.i(TAG, "onSubscribe");
s.request(Long.MAX_VALUE);
}

或者,您可以扩展 DisposableSubscriberResourceSubscriber

关于java - 当我在 FlowableOnSubscribe 类中调用 onNext 时,订阅者的 onNext 和 onComplete 函数不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428472/

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