如何将文档快照列表转换为对象列表?

时间:2020-03-19 01:05:56

标签: android kotlin google-cloud-firestore

我想将文档快照列表转换为UserData列表。

ViewModel中的

updateUsers()应该返回UserData的LiveData列表。

因此,我使用它和一个仓库来在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())
    })
}

我无法完全理解该操作,感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

由于嵌套的地图,我不知道这是否是最好的方法,但是我这样做是可行的,

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