加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

RxJava`Completable.andThen`没有连续执行?

发布时间:2020-12-15 01:59:20 所属栏目:Java 来源:网络整理
导读:我有一个用例,我在一个Completable中初始化一些全局变量,并在链的下一步(使用andThen运算符)我使用这些变量. 以下示例详细解释了我的用例 假设你有一个用户类 class User { String name; } 我有一个像这样的Observable, private User mUser; // this is a gl
我有一个用例,我在一个Completable中初始化一些全局变量,并在链的下一步(使用andThen运算符)我使用这些变量.

以下示例详细解释了我的用例

假设你有一个用户类

class User {
            String name;
        }

我有一个像这样的Observable,

private User mUser; // this is a global variable

        public Observable<String> stringObservable() {
            return Completable.fromAction(() -> {
                mUser = new User();
                mUser.name = "Name";
            }).andThen(Observable.just(mUser.name));
        }

首先,我在Completable.fromAction中做了一些初始化,我希望andThen运算符只在完成Completable.fromAction后启动.

这意味着我希望在andThen运算符启动时初始化mUser.

以下是我对此观察的订阅

stringObservable()
            .subscribe(s -> Log.d(TAG,"success: " + s),throwable -> Log.e(TAG,"error: " + throwable.getMessage()));

但是,当我运行此代码时,我收到一个错误

Attempt to read from field 'java.lang.String User.name' on a null object reference

这意味着mUser为null,然后在Completable.fromAction中执行代码之前启动.这里发生了什么事?

根据andThen的文件

Returns an Observable which will subscribe to this Completable and once that is completed then will subscribe to the {@code next} ObservableSource. An error event from this Completable will be propagated to the downstream subscriber and will result in skipping the subscription of the Observable.

解决方法

问题不在于,而是使用Observable.just(mUser.name)语句,然后在其中. just运算符将尝试立即创建observable,虽然它只会在Completable.fromAction之后发出.

这里的问题是,在尝试使用just创建Observable时,mUser为null.

解决方案:您需要推迟创建String Observable直到订阅发生,直到然后上游开始发布.

而不是andThen(Observable.just(mUser.name));

使用

andThen(Observable.defer(() -> Observable.just(mUser.name)));

要么

andThen(Observable.fromCallable(() -> mUser.name));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读