gpt4 book ai didi

java - 使用 Cloud Firestore (Android) 上的数组字段监听某些查询的更新

转载 作者:行者123 更新时间:2023-12-02 10:57:29 24 4
gpt4 key购买 nike

下图显示了简单聊天应用程序的数据结构。当两个用户想要通信时,就会在他们之间创建 channel 。成员字符串数组字段列出了用户名。

我想在登录用户的任何 channel 收到消息时通知用户。不确定如何做到这一点。

我尝试了以下查询,但没有成功。有任何想法吗?

    listenerRegistration2 =
firebaseFirestore.collection(COLLECTION_CHANNELS)
.whereEqualTo("members.0", username)
.addSnapshotListener((queryDocumentSnapshots, e) -> {
Log.d("myApp", "queryDocumentSnapshots = ");
});

enter image description here

最佳答案

编辑:2018 年 9 月 12 日

2018年8月28日开始,现在可以更新数组成员。更多信息 here

<小时/>

如官方文档中所述 arrays :

Although Cloud Firestore can store arrays, it does not support querying array members or updating single array elements.

很遗憾,您无法使用数组来实现此目的。如果您只想获取整个 memebers 数组,只需使用 get() 调用,然后仅迭代 Map,如下所示:

Map<String, Object> map = documentSnapshot.getData();
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (entry.getKey().equals("memebers")) {
Log.d("TAG", entry.getValue().toString());
}
}

但请注意,即使 memebers 对象作为数组存储在数据库中,entry.getValue() 返回的是 ArrayList,而不是一个数组

这里还有一个解决方法,可以帮助您实现此目的,但您需要将 memebers 数组属性更改为 map。因此,如果您考虑这种替代数据库结构,则更好的方法将是,其中每个成员都是映射中的键并且所有值都是 true:

memebers: {
"sister12": true,
"wow": true
}

关于java - 使用 Cloud Firestore (Android) 上的数组字段监听某些查询的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51605958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com