当前位置: 首页 > 知识库问答 >
问题:

尝试在空对象引用上调用虚方法booleancom.google.firebase.firestore.DocumentSnapshot.exists()

酆晔
2023-03-14

我在使用 firebase firestore 时收到一个空指针引用,我的应用崩溃了。这是我的代码:

private FirebaseFirestore fstore=FirebaseFirestore.getInstance();

private DocumentReference documentReference=fstore.collection("users").document("17030121084");
@Override
    protected void onStart(){
        super.onStart();
        documentReference.addSnapshotListener(this, new EventListener<DocumentSnapshot>() {
            @Override
            public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {

                if (documentSnapshot.exists()){
                    String semester=documentSnapshot.getString("sem");
                    sem.setText(semester);
                }
            }
        });
    }

这里的sem指的是我的文档17030121084中的字段。

有人能对此提出解决方案吗?

共有1个答案

隆兴修
2023-03-14

如果尝试读取文档时出错,documentSnapshot变量将为null。所以你的代码需要检查一下。

最简单的方法是添加一个简单的null检查:

public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
    if (document != null && documentSnapshot.exists()){
        String semester=documentSnapshot.getString("sem");
        sem.setText(semester);
    }
}

但是上面的代码还没有处理错误。由于在您的情况下文档显然是null,因此您实际上需要知道错误是什么才能修复它。

所以这是一个更好的方法:

public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
    if (e != null) {
        Log(TAG, "Listen failed.", e);
        return;
    }

    if (documentSnapshot.exists()){
        String semester=documentSnapshot.getString("sem");
        sem.setText(semester);
    }
}

请注意,此代码与侦听文档时留档中的代码非常匹配,因此我强烈建议在那里花一些时间。

 类似资料: