【发布时间】:2020-12-17 07:38:59
【问题描述】:
我在 Cloud Firestore 中有一个名为 creditcards 的集合和一个名为 ownedcreditcards 的集合。我想执行一个查询,在其中加入两个集合以仅查找存在于creditcards-collection 中的信用卡,而不是存在于ownedcreditcards 中的信用卡。据我了解,Firestore 中不存在类似 JOINS 的 SQL,您必须在多个查询中检索数据。我试图在我的两个集合上调用getAll()-functions(它检索所有文档),将数据临时存储在两个ArrayLists 中,然后将这两个列表相互比较。但是我尝试将数据存储在ArrayList 中的尝试没有成功,因为当我尝试LOG 时它返回空。
如何将我的两个集合中的数据存储在 ArrayList 中,或者有更简单的方法吗?
creditcards-collection 包含以下字段:
- 身份证
- 姓名
- 提供者
ownedcreditcards-collection 包含以下字段:
- 身份证
- 信用卡号
- 信用卡名称
- 昵称
- 用户名
Activity 和 Store 类的代码对于 usercreditcard 和 creditcard 或多或少相同。下面是usercreditcard的代码。
UserCreditCardActivity.kt
val arrayList = ArrayList<Any>()
private fun retrieveCards() {
val userCreditcard = UserCardStore()
userCreditcard.getAll(object : Callback<UserCardModel> {
override fun onCallback(list: List<UserCardModel>) {
for (card in list) {
adapter.add(UserCardItem(card)) //this works
arrayList.add(card) //this doesnt work as when I print the list it returns empty
}
}
})
}
UserCardStore.kt
override fun getAll(myCallback: Callback<UserCardModel>) {
auth = FirebaseAuth.getInstance()
documentdata.whereIn("userid", listOf(auth.uid))
.get().addOnCompleteListener { task ->
if (task.isSuccessful) {
val list = ArrayList<UserCardModel>()
for (document in task.result!!) {
val usercard = document.toObject(UserCardModel::class.java)
list.add(usercard)
}
myCallback.onCallback(list)
}
}
}
【问题讨论】:
标签: android firebase kotlin google-cloud-firestore