class User {
String name;
}
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
将被initalized。
以下是我订阅的这个可观察到的
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
返回一个Observable,它将订阅这个Completable,一旦完成,它将订阅{@code next}ObservableSource。来自此Completable的错误事件将传播到下游订阅服务器,并将导致跳过Observable的订阅。
问题不在于andthen
,而在于andthen
内部的语句observable.just(muser.name)
。just
运算符将尝试立即创建observable,尽管它只会在Completable.FromAction
之后发出。
这里的问题是,当试图使用just创建可观察的时,
muser
是空的。
解决方案:您需要推迟字符串Observable的创建,直到订阅发生,直到的上游,然后
开始发射。
andThen(Observable.defer(() -> Observable.just(mUser.name)));
andThen(Observable.fromCallable(() -> mUser.name));
问题内容: 我有一个用例,其中在Completable中初始化一些全局变量,然后在链的下一步(使用运算符)中使用这些变量。 以下样本详细解释了我的用例 说你有一堂课 我有一个这样的Observable, 首先,我正在做一些初始化工作,我希望操作员仅在完成之后才能开始。 这意味着我希望操作员开始时会初始化。 以下是我对这个可观察的订阅 但是当我运行此代码时,出现错误 表示为null, 在执行 。这里
问题内容: 我正在使用RxJava Observable api使用以下代码: 我的期望是观察代码,即subscribe()方法中的代码,在我指定了计算调度程序后将并行执行。相反,代码仍在单线程上按顺序执行。如何使用RxJava api使代码并行运行。 问题答案: RxJava在异步/多线程方面经常被误解。多线程操作的编码很简单,但是了解抽象是另一回事。 关于RxJava的一个常见问题是如何实现并
我需要在我的服务器上运行函数 但是由于安全原因被禁用,但是PHP执行函数正在运行和。 是否可以使用php函数执行相同的操作? 禁用功能 链接,符号链接,执行,通过,proc_close,proc_get_status,proc_open,shell_exec,系统,流行,关闭
问题内容: 我已经为Web API实现了多个软件包,每个软件包都有自己的测试用例。使用测试通过每个包装时通过。如果我想一次用测试案例运行所有测试,则总是失败。 在每个测试案例中,我使用来重新创建整个架构,并应用所有迁移。测试套件随机报告错误,说不存在关系/表,所以我猜每个测试套件(每个程序包)都以某种方式并行运行,从而弄乱了数据库状态。 我试图通过一些测试标志,例如没有成功。 这里的问题可能是并行
我有一些传入的并发请求应该以串行方式处理。我试图通过将请求转换为消息并发布到jms队列来实现这一点。然后使用 mdb 处理队列。 使用特定于供应商的配置,我知道我可以将mdb限制为一个实例,但是有什么推荐的可移植的方法来解决这个问题呢? 编辑:忘了提一下我真的不需要jms的特性(可靠性等)。
有没有一种方法可以让发出数据,并且当它发出数据时(或者当它完成时)以异步方式使用该数据触发? 我的问题与此非常相似,但我试图异步调用Completable。 这是我试图实现的一个微不足道的例子: 我看到订阅映射中的Completable允许我以某种方式完成这项任务,但我不知道如何以正确的方式处理它(因为在活动中不调用此方法)。 非常感谢您的帮助,谢谢!