android - 如何将文档快照列表转换为对象列表?
问题描述
我想将文档快照列表转换为 UserData 列表。
updateUsers()
在 ViewModel 中应该返回 UserData 的 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)
}
}
在 ViewModel 中(我的 UserData 对象有两个字符串,姓名和电话):
fun updateUsers(): LiveData<List<UserData>> {
val liveData = repo.getAllUsers() // return list of Documents Snapshots
return Transformations.map(liveData, { snap: List<DocumentSnapshot?> ->
//how do i transform the live data in the right way?
//this is something i was trying but it doesnt work
UserData(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())
}
}
}
推荐阅读
- python - 确定 pandas 序列的元素是否包含不同序列的元素作为子字符串
- javascript - 如何从一个输入标签传递两个“名称”以在服务器中访问
- python - pandas 的 .query() 不接受我使用 like 'XXX%' 来表达 startwith 的表达
- cmake - 从 MSVC 2019 内置 CMake 配置英特尔编译器
- c# - 委托问题,名称在当前上下文中不存在?
- python - 仅从数据框中选择每个月的最后一周 - Python/Pandas
- llvm - 将现有函数的参数放在对 LLVM 函数传递中另一个函数的调用中
- javascript - 如何使用插值字符串设置 Formik 初始值?
- informatica-cloud - 如何处理 iics/informatica 云中的 clob 列
- c# - 装箱结构列表