Исключение NullPointerException: в firebase

#java #android #firebase #google-cloud-firestore

#java #Android #firebase #google-облако-firestore

Вопрос:

Я попытался добавить это в свою активность на карте, но он выдает эту ошибку

java.lang.Исключение NullPointerException: попытка вызвать виртуальный метод ‘java.util.Итератор com.google.firebase.firestore.QuerySnapshot.iterator()’ для нулевой ссылки на объект

введите описание изображения здесь

 mFireStore.collection("Locations").addSnapshotListener(new EventListener<QuerySnapshot>() {

    @Override
    public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
        if (error != null) {
            Toast.makeText(MapActivity.this, "error in firebase"   error, Toast.LENGTH_SHORT).show();
        }

        for (DocumentSnapshot doc: value) {
            String name = doc.getString("name");
            String lat = doc.getString("latitude");
            String log = doc.getString("longitude");
            double v1 = Double.parseDouble(lat);
            double v2 = Double.parseDouble(log);
            LatLng latLng = new LatLng(v1, v2);
            mMap.addMarker(new MarkerOptions().position(latLng).title(name)).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
        }
    }
});
  

Комментарии:

1. возможно, у вас нет ошибки, но вы уверены, что получаете значение обратно из firebase?

Ответ №1:

onEvent Функция будет вызвана либо с ошибкой, либо с моментальным снимком запроса. Он никогда не получит оба.

В вашем коде вы обрабатываете ошибку, но затем также пытаетесь обработать снимок запроса. Это то, что не удается, потому что при получении ошибки вы не получите снимок запроса.

Решение состоит в том, чтобы выйти из функции после обработки ошибки:

 @Override
public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
    if (error != null) {
        Toast.makeText(MapActivity.this, "error in firebase"   error, Toast.LENGTH_SHORT).show();
        return; // exit after handling error
    }

    for (DocumentSnapshot doc: value) {
        String name = doc.getString("name");
        String lat = doc.getString("latitude");
        String log = doc.getString("longitude");
        double v1 = Double.parseDouble(lat);
        double v2 = Double.parseDouble(log);
        LatLng latLng = new LatLng(v1, v2);
        mMap.addMarker(new MarkerOptions().position(latLng).title(name)).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
    }
}