我有一个类似的Firestore文档设置:
public class Item {
String name;
Map<String, Boolean> testMap;
}
我有所有getter和空的consturctor,添加,更新Firestore文档工作。
当我将值放入地图时,它看起来像这样:
testMap: {
testValue: true }
但是当我尝试使用下面的代码查询该值时,for()
循环不起作用。我得到I/Task: Successful
日志,但I/TestLog: TestLog
未显示,而且其下方的代码也不起作用
mColRef.whereEqualTo("testMap.testValue", true)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()) {
Log.i("Task", "Successful");
for (QueryDocumentSnapshot document : task.getResult()) {
Log.i("TestLog", "TestLog");
Log.i("ItemName:", document.getString("name");
}
} else {
Toast.makeText(FirebaseTest.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
我真的很困惑,我几乎跟着documentation,但我无法得到结果
答案 0 :(得分:0)
好的,我让它发挥作用,事实证明这是我在查询中的愚蠢错误。
我更新了testMap
,其价值与我在此处提供的价值不同,确切地说是一封电子邮件,因为我觉得它完全没有任何区别。事实证明它确实如此。当我查询结果时,我使用了mColRef.whereEqualTo("testMap.email@email.com", true)
,并且.
(点)在电子邮件地址中。点不能用作查询中的值,因为它用于将数据库中的嵌套对象与所有其他对象分开,因此查询可能在{{1}内查找名为com
的对象} map