- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Completable observable,我正在使用 doOnComplete() 运算符来更新我的事件。但是,当我使用 setValue
更新实时数据时,用 postValue
替换对我来说不起作用。
谁能帮我解释为什么 setValue
即使在尝试将调度程序设置为主线程后仍无法正常工作。
Completable.complete()
.subscribeOn(Schedulers.io())).observeOn(AndriodSchdulers.mainThread())
.delay(getApplication().getResources().getInteger(R.integer.one_minute_time_in_millisec), TimeUnit.MILLISECONDS)
.doOnComplete(() -> liveData.setValue(some value))
.subscribe();
最佳答案
我找到了问题,这很棘手。问题是由 delay
操作引起的:
/**
* Delays the emission of the success signal from the current Single by the specified amount.
* An error signal will not be delayed.
*
* Scheduler:
* {@code delay} operates by default on the {@code computation} {@link Scheduler}.
*
* @param time the amount of time the success signal should be delayed for
* @param unit the time unit
* @return the new Single instance
* @since 2.0
*/
@CheckReturnValue
@SchedulerSupport(SchedulerSupport.COMPUTATION)
public final Single delay(long time, TimeUnit unit) {
return delay(time, unit, Schedulers.computation(), false);
}
如文档中所述,延迟默认切换到计算线程。因此,通过将 observeOn(AndroidSchedulers.mainThread())
放在开头,您将线程设置为 UI 线程,但随后在链中延迟操作将其更改回计算线程.因此,解决方案很简单:将observeOn
放在delay
之后。
Completable.complete()
.subscribeOn(Schedulers.io())
.delay(1000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(() -> mutableLiveData.setValue(true));
关于android - LiveData setValue 在 doOnComplete android RXJava 之后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53547625/
我有这样的东西: service.getStuff() .map(...) .observeOn(AndroidSchedule
正如您从下面的代码中看到的,我正在尝试测试在我的存储库中发生的 doOnComplete() 调用的行为。但是,当我模拟客户端的注入(inject)依赖项时,我使用 Observable.just()
在这段代码中: Rx.Observable.range(0,8) .doOnCompleted(() => console.log("range complete")) .take(1
我是 RxScala Observables 的新手,在组合使用 take(n) 和 doOnCompleted() 时遇到奇怪的行为。 下面我有一个测试示例,我相信第一个订阅是正确的(开头为 tak
我有以下情况:我需要从数据库获取数据。当我尝试进入 UI 线程时(这是我的做法): List movies = new ArrayList<>(); for (MovieEntity movie:mo
我是 RX Java 的新手,我有一个问题。我有一个 completable 并且想在获得一个值并在 emmition 的一个步骤中执行一些操作后继续我的操作。 if (mIsCopy) {
我尝试从服务器获取一些数据。 Observable> backendObservable = mCountriesApi.getCountries() .subscribeOn
我正在学习 RxAndroid,并从我项目中的一个非常简单的示例开始。即获取可观察的用户个人资料图片 URL 响应。 下面是获取字符串 URL 值的代码,我使用 Picasso 加载图像 URL。当我
我有一个 Completable observable,我正在使用 doOnComplete() 运算符来更新我的事件。但是,当我使用 setValue 更新实时数据时,用 postValue 替换对
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 4 年前。 Improve
我是一名优秀的程序员,十分优秀!