gpt4 book ai didi

android - LiveData setValue 在 doOnComplete android RXJava 之后不起作用

转载 作者:行者123 更新时间:2023-11-29 15:34:38 25 4
gpt4 key购买 nike

我有一个 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));

You can also checkout this medium post about it

关于android - LiveData setValue 在 doOnComplete android RXJava 之后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53547625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com