java Firestore遍历文档以查找空字段
我正在我的应用程序中实现一项功能,允许用户查看正在进行的关于帖子的讨论。我希望用户只能有5个活动的讨论。(创建讨论时,我希望能够检查用户文档,查看他们是否超过了允许的最大讨论数。这就是我正在处理的问题
currentDocument.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
if (document.get("PostID 1") == null) {
//No discussion post in this field
} if (document.get("PostID 2") == null){
//No discussion post in this field
}
}
}
}
});
为了实现这一点,我必须为每个文档字段创建一个if语句,这对我来说似乎是糟糕的编程实践。有没有更好的方法来解决这个问题,或者我应该用不同的方法来解决这个问题?欢迎大家的建议
文件:
更新:
接近我的解决方案,但仍然无法解决
我拿着我的文件
currentDocument.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
}
我获取文档数据并存储它
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
Map test = document.getData(); }
然后我就慢慢地过去了
for (Object entry : test.entrySet() ){
Log.w(TAG, "Key = " + entry.toString()); }
到目前为止,我很好,我现在陷入困境的地方是我想要一个if语句来确定值是否为null,这就是我正在使用的
for (Object entry : test.entrySet() ){
Log.w(TAG, "Key = " + entry.toString());
if (entry.toString().contains(null)){
Log.w(TAG, entry.toString() + " is equal to null");
}
}
它抛出了错误
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference
我认为我没有正确读取if语句中的数据
# 1 楼答案
当你有一个DocumentSnapshot时,你可以调用它的getData(),得到所有字段和值的Map。然后,您只需像使用entrySet()的任何其他Java映射一样迭代它