Попытка вызвать виртуальный метод «boolean com.google.firebase.firestore.DocumentSnapshot.exists ()» для ссылки на пустой объект - PullRequest
1 голос
/ 23 февраля 2020

Я получаю ссылку на нулевой указатель при использовании 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 Ответ

0 голосов
/ 23 февраля 2020

Если при чтении документа произошла ошибка, переменная 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);
    }
}

Но приведенный выше код еще не обрабатывает ошибку. , И поскольку в вашей ситуации document означает 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);
    }
}

Обратите внимание, что этот код близко соответствует тому, что содержится в документации по прослушиванию документов , поэтому я настоятельно рекомендую провести там некоторое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...