我有一个返回此内容的DAO:
@Query(value = "SELECT * FROM users")
fun getUsers(): LiveData<List<User>>
我需要观察一下并将User
对象转换为People
对象。 People
没有实现或扩展User
,但是我有一个可以转换它们的方法。这是我无法更改的要求。
fun convert(user: User): Person {...}
这就是我试图观察数据的方式。
class UserViewModel : ViewModel {
private lateinit var people: MutableLive<List<People>>
init {
db.getUsers().observe(this, Observer { userList ->
if(userList != null)
// here I need to do some sort of transformation.
}
}
// what activity will observer
fun getPeople() : MutableLive<List<People>> {
return people
}
}
因此,如果Activity
可以观察到people: MutableLive<List<People>>
并且不知道这种转变正在发生,我会喜欢的。
请帮助。
答案 0 :(得分:1)
这是Transformations.map
的工作,在您的示例中,您可以用来执行以下操作:
class UserViewModel : ViewModel() {
private lateinit var people: LiveData<List<Person>>
init {
people = Transformations.map(db.getUsers()) { users ->
users.map { user -> convert(user) }
}
}
}
这为您提供了一个LiveData
,它是由原始来源提供的,但是将给定的映射功能应用于它发出的数据,并且生命周期意识也得到了适当的维护。