RxJava`Completable.andThen`没有连续执行?
我有一个用例,我在一个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的文件
解决方法
问题不在于,而是使用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)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |