首页 > 解决方案 > 如何将文档快照列表转换为对象列表?

问题描述

我想将文档快照列表转换为 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())
    })
}

我不能完全理解如何做到这一点,任何帮助表示赞赏。

标签: androidkotlingoogle-cloud-firestore

解决方案


由于嵌套地图,我不知道这是否是最好的方法,但我这样做并且有效:

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())
            }
    }
}

推荐阅读