Android 如何将文档快照列表转换为对象列表?
我想将文档快照列表转换为用户数据列表 ViewModel中的Android 如何将文档快照列表转换为对象列表?,android,kotlin,google-cloud-firestore,Android,Kotlin,Google Cloud Firestore,我想将文档快照列表转换为用户数据列表 ViewModel中的updateUsers()应返回用户数据的LiveData列表 所以我使用这个和一个repo来获取firestore集合中的所有用户: class ListUsersLiveData(private val query: Query) : LiveData<List<DocumentSnapshot?>>(), EventListener<QuerySnapshot>{ .....
updateUsers()
应返回用户数据的LiveData列表
所以我使用这个和一个repo来获取firestore集合中的所有用户:
class ListUsersLiveData(private val query: Query)
: LiveData<List<DocumentSnapshot?>>(), EventListener<QuerySnapshot>{
.....
.....
override fun onEvent(snapshot: QuerySnapshot?, e: FirebaseFirestoreException?) {
val documents : List<DocumentSnapshot> = snapshot!!.documents
postValue(documents)
}
}
类ListUsersLiveData(私有val查询:查询)
:LiveData(),EventListener{
.....
.....
覆盖fun OneEvent(快照:QuerySnapshot?,e:FirebaseFirestoreException?){
val文档:列表=快照!!.documents
邮政价值(文件)
}
}
在ViewModel中(my UserData obejct有两个字符串,name和phone):
fun updateUsers():LiveData{
val liveData=repo.getAllUsers()//返回文档快照列表
返回Transformations.map(liveData,{snap:List->
//如何以正确的方式转换实时数据?
//这是我一直在尝试的东西,但它不起作用
用户数据(snap.get(“name”).toString(),snap.get(“phone”).toString())
})
}
我无法完全理解如何进行此操作,非常感谢您的帮助。由于嵌套贴图,我不知道这是否是最好的方法,但我是这样做的,并且有效:
fun updateUsers(): LiveData<List<UserData>> {
val liveData = repo.getAllUsers()
return Transformations.map(liveData) { snap: List<DocumentSnapshot?> ->
snap.map { user->
UsuarioData(user!!.get("name").toString(),user.get("phone").toString())
}
}
}
fun updateUsers():LiveData{
val liveData=repo.getAllUsers()
返回Transformations.map(liveData){snap:List->
snap.map{user->
UsuarioData(user!!.get(“name”).toString(),user.get(“phone”).toString())
}
}
}
您现在拥有的有什么问题吗?是否有错误/它是否做了与您预期不同的事情?updateUsers()中的返回带下划线,因为它需要一个用户数据的LiveData列表,我不知道如何转换repo获得的文档快照列表。您能为我指出正确的方向吗?嵌套映射不是问题。将输入列表中的每个项目转换为输出列表需要内部列表。将输入LiveData转换为输出LiveData需要外部的LiveData。
fun updateUsers(): LiveData<List<UserData>> {
val liveData = repo.getAllUsers()
return Transformations.map(liveData) { snap: List<DocumentSnapshot?> ->
snap.map { user->
UsuarioData(user!!.get("name").toString(),user.get("phone").toString())
}
}
}