gpt4 book ai didi

android - 使用 Room 实时查询进行生命周期状态管理

转载 作者:行者123 更新时间:2023-11-29 23:22:09 27 4
gpt4 key购买 nike

我有一个包含三种状态的 View :

sealed class MainState(val movieList: List<Movie>) {
class Loading(movies: List<Movie> = emptyList()) : MainState(movies)
class Success(movies: List<Movie>) : MainState(movies)
class Error(val throwable: Throwable, movies: List<Movie> = emptyList()) : MainState(movies)
}

这些状态被包装在 MutableLiveData 中并由 ViewModel 管理:

class MovieListViewModel(private val movieRepo: MovieRepository) : ViewModel() {
val stateLiveData = MutableLiveData<MainState>()
.
.
}

我想将查询 liveData 集成到我的状态 liveDate,这样当查询 liveData 更新到 movieList 时,状态 liveData 更新到 Success(movieList)。我怎样才能做到这一点?

这是我的实时查询的样子:

@Dao
interface MovieDAO {
@Query("SELECT * FROM Movie")
fun getAllMovies(): LiveData<List<Movie>>
}

最佳答案

如果你已经为 Room 安装了 RxJava2 支持,我会考虑以下几点:

val stateLiveData = MutableLiveData<MainState>()

dao().getAllMovies()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(() -> stateLiveData.value = Loading(emptyList()))
.subscribeBy(
onNext = { stateLiveData.value = Success(it) }
onError { stateLiveData(it, emptyList()) }
)

当然,您需要将 Room 查询的返回类型更改为 Flowable<MainState>Observable<MainState> .

关于android - 使用 Room 实时查询进行生命周期状态管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54152045/

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