有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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语句,这对我来说似乎是糟糕的编程实践。有没有更好的方法来解决这个问题,或者我应该用不同的方法来解决这个问题?欢迎大家的建议

文件:

enter image description here

更新:

接近我的解决方案,但仍然无法解决

我拿着我的文件

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) 个答案

  1. # 1 楼答案

    当你有一个DocumentSnapshot时,你可以调用它的getData(),得到所有字段和值的Map。然后,您只需像使用entrySet()的任何其他Java映射一样迭代它