android - RxJava : How to wait for a value to be initialized by a previous subscription?

标签 android rx-java

我有一个初始化为网络调用的类变量。

类似 getter 的方法负责在初始化时返回值,或者在网络调用尚未返回时等待初始化值。

如何用 RxJava 实现这个?

另一个解决方案是,我可以简单地创建一个新的网络调用,而不是等待,以防值仍未初始化,如下所示:

private String value;

public Observable<String> getValue() {
    if (value != null) {
        return Observable.just(value);
    }

    return getValueRemotely();
}

private Observable<String> getValueRemotely() {
    ...
}

但我想避免进行多次网络调用。

有什么想法吗?

最佳答案

这实际上是 AsyncSubject 的一个很好的用例。

private AsyncSubject<String> value = AsyncSubject.create();

public Observable<String> getValue() {
    value.asObservable();
}

并且在 getValueRemotely() 中,您必须确保在 valueonNext()onComplete().

value.onNext(valueString);
value.onCommpleted();

AsyncSubject observable 只有在完成时才会发出一个项目。

关于android - RxJava : How to wait for a value to be initialized by a previous subscription?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40833873/

相关文章:

android - 内存泄漏,但如何传递与解决泄漏的 Activity 不同的上下文?

java - 一次创建包含子集合的文档

java - 将 ArrayList<NameValuePair> 传递给 ASyncTask 并更新值

android - 如何在不到处添加特定代码的情况下处理 auth0 403 错误 (Retrofit/okhttp/RxAndroid)

android - RxJava单: flatMap if false

java - RxJava 过滤空列表并使用 firstOrDefault

android - 如何在android中左右设置两个自定义actionbar按钮?

java - 应用后壁纸会自动裁剪

observable - RxJava 2 Flowable 是热的还是冷的?

java - RxJava2 - 在并行轨道上发出 onError 将得到 UndeliverableException