我有一个用例,其中在Completable中初始化一些全局变量,然后在链的下一步(使用andThen
运算符)中使用这些变量。
以下样本详细解释了我的用例
说你有一堂课 User
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
。
这意味着我希望操作员开始mUser
时会初始化andThen
。
以下是我对这个可观察的订阅
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, andThen
在执行 Completable.fromAction
。这里发生了什么事?
根据文件 andThen
返回一个Observable,它将订阅此Completable,一旦完成,便将订阅{@code next} ObservableSource。
来自此Completable的错误事件将传播到下游订阅者,并且将导致跳过Observable的订阅。
问题不在里面,andThen
而是在
Observable.just(mUser.name)
里面andThen
。该just
运营商将立即尝试创建观察到,虽然它只会发出后Completable.fromAction
。
这里的问题是,尝试创建Observable
Just时,其mUser
为null。
解决方案 :您需要推迟String Observable的创建,直到发生订阅为止,直到andThen
开始发射的上游。
代替 andThen(Observable.just(mUser.name));
用
andThen(Observable.defer(() -> Observable.just(mUser.name)));
要么
andThen(Observable.fromCallable(() -> mUser.name));
首先,我在中进行一些初始化,我希望操作符只有在完成之后才启动。 这意味着当运算符启动时,将被initalized。 以下是我订阅的这个可观察到的 返回一个Observable,它将订阅这个Completable,一旦完成,它将订阅{@code next}ObservableSource。来自此Completable的错误事件将传播到下游订阅服务器,并将导致跳过Observable的订阅。
我是RxJava的新手,正在尝试从link执行多个观测值的并行执行示例:RxJava并行获取观测值 虽然上面链接中提供的示例是并行执行可观察对象,但是当我在foreach方法中添加一个Thread.sleep(TIME_IN_MILLISECONDS)时,系统开始一次执行一个可观察对象。请帮助我理解为什么Thread.sleep停止可观察对象的并行执行。 下面是导致多个观测值同步执行的修改示例:
嘿,我在POM中做了这个配置。xml文件并行运行测试。但当我使用cmd进行“mvn验证”时,只有一个浏览器正在运行一个功能,而在完成一个功能文件的执行后,另一个功能正在运行。这是我的代码和pom。xml请建议我怎么做? 我正在使用cucumber 这是我的pom.xml代码: 提前感谢。
我制作了以下cronjob sh文件: 手动运行此文件时,作业将正确运行。
问题内容: 我正在使用RxJava Observable api使用以下代码: 我的期望是观察代码,即subscribe()方法中的代码,在我指定了计算调度程序后将并行执行。相反,代码仍在单线程上按顺序执行。如何使用RxJava api使代码并行运行。 问题答案: RxJava在异步/多线程方面经常被误解。多线程操作的编码很简单,但是了解抽象是另一回事。 关于RxJava的一个常见问题是如何实现并
问题内容: 我有2个AsyncTask,一个正在创建套接字连接,另一个正在使用那些套接字传输对象。我的代码是这样的: 但是,永远不会创建或执行被调用。我试图更改顺序,但未创建或执行发送器… 怎么了 问题答案: 当HONEY COMB将多个AsyncTask执行从并发更改为顺序执行时,我讨厌它。因此,每次执行AsyncTask时,我都会执行类似的操作。 但是线程池大小为5,如果添加第六个任务,它将被