我有一个这样的Firestore文档设置:
public class Item {
String name;
Map<String, Boolean> testMap;
}我有所有的getter和空的consturctor,添加,更新修复文档工作。
当我把值放在地图上时,它看起来如下:
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();
}
}
});我真的很困惑,我几乎跟随文档,但我无法得到结果
发布于 2018-04-22 11:24:21
好的,我把它做好了,结果是我在质疑中犯了一个愚蠢的错误。
我更新的testMap与我在这里提供的不同的价值,确切地说,这是一封电子邮件,因为我认为它完全没有任何区别。事实证明确实如此。当我询问结果时,我使用了mColRef.whereEqualTo("testMap.email@email.com", true),电子邮件地址中有.(点)。在查询中,点不能用作值,因为它用于将嵌套对象与数据库中的所有其他对象分离开来,因此查询可能在email映射中查找名为email的对象
https://stackoverflow.com/questions/49961478
复制相似问题