Как избежать нулевой ссылки на объект? - PullRequest
0 голосов
/ 01 апреля 2020

поэтому я создавал приложение в Android Studio и хотел использовать RecyclerView для отображения списка объектов CardView. Однако данные для этого списка моментально копируются из Firebase Firestore, и когда я выхожу из приложения из приложения, методы addSnapshotListener и getDocumentChanges выдают сообщение об ошибке:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.google.firebase.firestore.QuerySnapshot.getDocumentChanges()' on a null object reference

Как это исправить? Я включу весь метод переписывания списка ниже:

private void rewriteLessonList() {

        FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
        if (currentUser != null) {

            firestoreCheck.collection("Lessons").document(userID).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<DocumentSnapshot> task) {

                    if (task.isSuccessful()) {

                        lesson_list_rewrite_inner = new ArrayList<>();

                        firestoreCheck.collection("Lessons").addSnapshotListener(new EventListener<QuerySnapshot>() {
                            @Override
                            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {

                                lesson_list.clear();

                                for (DocumentChange doc : queryDocumentSnapshots.getDocumentChanges()) {

                                    if (doc.getType() == DocumentChange.Type.ADDED) {

                                        LessonPost lessonPostMain = doc.getDocument().toObject(LessonPost.class);
                                        lesson_list.add(lessonPostMain);

                                        lessonRecyclerAdaptor.notifyDataSetChanged();
                                        timeWaste();
                                    }

                                }

                            }
                        });

                    } else {
                    Toast.makeText(MainActivity.this, "Error loading lessons ", Toast.LENGTH_LONG).show();

                }
            }
        });

    }

}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Попробуйте заменить @ Nullable аннотацию на @ NonNull в объявлении метода.

0 голосов
/ 01 апреля 2020

Кажется, что queryDocumentSnapshots == null. Таким образом, вы можете добавить новый чек.

if (queryDocumentSnapshots != null) {
    List<DocumentChange> documentChanges = queryDocumentSnapshots.getDocumentChanges();
    if (documentChanges != null) {
        for (DocumentChange doc : documentChanges ) {
            ...
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...