【问题标题】:How to know result type with Task.whenAllComplete with multiple types of data如何使用 Task.whenAllComplete 了解多种数据类型的结果类型
【发布时间】:2021-03-05 10:07:36
【问题描述】:

我想调用 Firestore 中的几个表并收集所有信息,进行解析并将其发送回查看。

所以我有类似的东西:(示例)

val cities = mutableListOf<City>()
val users = mutableListOf<User>()

val tasks = mutableListOf<Task<QuerySnapshot>>()
val q1 = database
    .collection("cities")
    .whereEqualTo("place.city", cityName)
    .get()

val q2 = database
    .collection("users")
    .whereEqualTo("city", cityName)
    .get()

tasks.add(q1)
tasks.add(q2)

Tasks.whenAllComplete(tasks)
      .addOnCompleteListener { allTask->
           allTask.forEach{ task->
               // transform into the list of its corresponding model
           }
       }

问题来了,我不知道如何知道将快照解析为相应模型的任务的“起源”。

如何根据结果任务确定我必须使用哪个模型?

【问题讨论】:

  • “如何知道任务的“起源””是什么意思?您到底在寻找什么?
  • 如果我一个人打电话,我知道我会得到一个快照,它是 Cities 列表,另一个是 Users 列表。但是如果我调用一个Task,(同时获取所有信息),我不知道如何区分哪个快照是知道如何将信息转换为相应的模型。

标签: android firebase kotlin google-cloud-firestore task


【解决方案1】:

作为参数,您得到的是对象列表。要知道哪个是对应类型的对象,需要检查该对象是否是特定类的实例,如下代码行:

Tasks.whenAllSuccess(tasks).addOnSuccessListener(OnSuccessListener<List<Any>> { list ->
    for (obj in list) {
        if (obj is City) {
            val city = (obj as DocumentSnapshot).toObject(City::class.java)
        } else if (obj is User) {
            val user = (obj as DocumentSnapshot).toObject(User::class.java)
        }
    }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2011-09-21
    • 2015-03-02
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多