#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));
}
}