android - 如何使用 Task.whenAllComplete 了解多种数据类型的结果类型
问题描述
我想调用 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
}
}
问题来了,我不知道如何知道将快照解析为相应模型的任务的“起源”。
如何根据结果任务确定我必须使用哪个模型?
解决方案
作为参数,您得到的是对象列表。要知道哪个是相应类型的对象,您需要检查该对象是否是特定类的实例,如以下代码行所示:
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)
}
}
})
推荐阅读
- java - 是否有删除所有未使用变量的 Eclipse 快捷方式?
- android - 如何修复这个 SQLite 异常?
- html - 我想在屏幕中间调整内容框的大小
- c# - 如何在循环中处理异步 tcpClient 连接
- android - 找到多个文件,其独立于操作系统的路径为“lib/armeabi-v7a/libRSSupport.so”
- javascript - 有什么方法可以使用 jQuery 过滤多个条件?
- java - jUnit mock 测试和代码覆盖 IOException
- vue.js - Vue ctrl+s 事件监听器未触发
- drupal - 如何使用 DDEV 配置搜索 API
- node.js - Node.js - 用于生产的 Google Cloud 应用程序