【发布时间】:2021-05-11 14:06:54
【问题描述】:
我正在做我的第一次实习,我正在一个项目中将 RX 代码转换为 LiveData。 在某些时候,我不得不在某些存储库中用 observeForever() + Globalscope(Dispatchers.Main) 替换 subscribe() 函数,但显然使用 observeForever() 并不是最好的事情,我的实习导师建议我使用 Transformations.map () 代替。
我不确定如何在以下代码中使用 map() 而不是 observeForever(在存储库中):
//I am using Globalscope with Dispathers.Main otherwise I get "cannot observeForever in a background Thread error
GlobalScope.launch(Dispatchers.Main){
someBooleanLiveData.observeForever {
if (it) {
// DO SOMETHING
} else {
// DO SOMETHING ELSE
}
}
}
我从 Transformations.map() 函数中了解到的是,它用于映射给定 LiveData 对象的值,就像 ReactiveX 的 Map operator 一样
我试过了,但似乎没有做我想做的事:
Transformations.map(someBooleanLiveData){
if (it) {
// DO SOMETHING
} else {
// DO SOMETHING ELSE
}
}
我的问题是我应该如何使用 Transformation.map() 来避免 observeForever ?
做某事:如果您需要示例,可能是 livedataObject.postValue(it)
提前感谢您的回复。
【问题讨论】:
-
Avoid GlobalScope(来自 Kotlin 的首席开发人员)
-
这并不能真正回答我的问题^^,但它似乎真的很有用。我有空的时候会看一下(可能就在我找到问题的答案之后)
-
Transformations.map()用于创建您将在其他地方观察到的新 LiveData。它并不真正适用于响应原始 LiveData 的值而执行某些操作。如果当前没有观察到它,则当源 LiveData 值更改时它不会做任何事情。someBooleanLiveData是否在您项目的其他任何地方被观察到?也许 LiveData 甚至不适合它。
标签: android kotlin android-livedata android-livedata-transformations