Firestore遍历文档以查找空字段

时间:2019-08-09 21:13:43

标签: java android google-cloud-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 个答案:

答案 0 :(得分:2)

拥有DocumentSnapshot时,可以在其上调用getData(),以获取所有字段和值的Map。然后,您就可以像使用其他Java Map一样entrySet()对其进行迭代。