gpt4 book ai didi

android - 回调 Observable

转载 作者:行者123 更新时间:2023-11-29 18:28:00 24 4
gpt4 key购买 nike

我有这个函数从 Cloud Firestore 获取文档:

fun getBasicItems(callback: (MutableList<FireStoreBasicItem>) -> Unit) {
fireStore.collection("BasicItems")
.get()
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val basicItems = mutableListOf<FireStoreBasicItem>()
for (document in task.result!!) {
val fireStoreBasicItem = document.toObject(FireStoreBasicItem::class.java)
basicItems.add(fireStoreBasicItem)
callback(basicItems)
}
}
}
}

在我的 ViewModel 中,我想将其转换为 Observable,然后转换为 ViewState:

private fun loadDataTransformer(): ObservableTransformer<ItemEvent.LoadDataEvent, ItemsViewState> {
return ObservableTransformer { event ->
event.map {
itemRepository.getBasicItems(){myBasicItemList -> Observable.just(myBasicItemList)}

}
}

我也尝试过使用 Observable.fromCallable。我做错了什么?

编辑:我的解决方案

private fun loadDataTransformer(): ObservableTransformer<ItemEvent.LoadDataEvent, ItemsViewState> {
return ObservableTransformer { event ->
event.flatMap {
Single.create<MutableList<FireStoreBasicItem>> {
itemRepository.getBasicItems { myBasicItemList ->
it.onSuccess(myBasicItemList)
}
}.toObservable()
.map {
ItemsViewState.ItemDataState(it)
}
}
}
}

最佳答案

如果您只需要一个项目列表,我建议您使用 Single 而不是 Observable。然后你可以使用Single.create:

private fun loadDataTransformer(): Single<ItemsViewState> =
Single.create { emitter ->
itemRepository.getBasicItems() { myBasicItemList ->
val viewState = // do some transformations
emitter.onSuccess(viewState)
}
}

关于android - 回调 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57836498/

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