как удалять все маркера с карты?

на карту приходит 3 и более маркера(к примеру) с базы firebase, и через заданное количество времени они должны удалиться....но по факту получается, что из базы маркера удаляются исправно, а с карты удаляется только последний, а предыдущие 2 остаются (после перезапуска приложения они пропадают естественно)....

как это исправить?

делаю так:

private Map<String, Marker> hashMap = new HashMap<String, Marker>();

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
            DatabaseReference uidRef = rootRef.child("Markers").child("Markers");
            uidRef.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                    for (DataSnapshot data : dataSnapshot.getChildren()) {

                        final String key = data.getKey();
                        Log.d(TAG, "Adding location for '" + key + "'");
                        Double latitude = data.child("latitude").getValue(Double.class);
                        Double longitude = data.child("longitude").getValue(Double.class);

                        LatLng location = new LatLng(latitude, longitude);

                        Marker marker = hashMap.get(key);

                        if (marker == null) {

                                    marker = mMap.addMarker(new MarkerOptions().position(location).icon(BitmapDescriptorFactory.fromResource(R.drawable.img)).draggable(true));
}
                            hashMap.put(key, marker);
                        } else {
                            marker.setPosition(location);
                        }
                    }
                }

                @Override
                public void onChildChanged(@NonNull final DataSnapshot dataSnapshot, @Nullable String s) {
                    for (DataSnapshot data : dataSnapshot.getChildren()) {
                        String key1 = data.getKey();
                        Log.d(TAG, "Location for '" + key1 + "' was updated.");

                        Double latitude = data.child("latitude").getValue(Double.class);
                        Double longitude = data.child("longitude").getValue(Double.class);

                        LatLng location = new LatLng(latitude, longitude);

                        marker34 = hashMap.get(key1);

                        if (marker34 == null) {
                                    marker34 = mMap.addMarker(new MarkerOptions().position(location).icon(BitmapDescriptorFactory.fromResource(R.drawable.img)).draggable(true));
                                }

                            hashMap.put(key1, marker34);

                        } else {
                            marker34.setPosition(location);
                        }
                    }
                }

                @Override
                public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot data : dataSnapshot.getChildren()) {
                        String key = data.getKey();
                        Log.d(TAG, "Location for '" + key + "' was removed.");

                        Marker marker = hashMap.get(key);
                        if (marker != null) {
                            marker.remove();
                        }
                    }
                }

                @Override
                public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                    for (DataSnapshot data : dataSnapshot.getChildren()) {
                        Log.d(TAG, "Priority for " + data.getKey() + " was changed.");
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Log.w(TAG, "markerUpdateListener:onCancelled", databaseError.toException());
                }
            });

Ответы (1 шт):

Автор решения: sviter-pro

Просто поудалял for (DataSnapshot data : dataSnapshot.getChildren()) {

полный код:

FirebaseUser user = firebaseAuth.getCurrentUser();
            String userid = user.getUid();
            DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
            DatabaseReference uidRef = rootRef.child("Markers").child("Markers").child(userid);
            uidRef.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                        String key = dataSnapshot.getKey();
                        Log.d(TAG, "Adding location for '" + key + "'");
                        Double latitude = dataSnapshot.child("latitude").getValue(Double.class);
                        Double longitude = dataSnapshot.child("longitude").getValue(Double.class);

                        LatLng location = new LatLng(latitude, longitude);

                        Marker marker = hashMap.get(key);

                        if (marker == null) {
                           marker = mMap.addMarker(new MarkerOptions().position(location).icon(BitmapDescriptorFactory.fromResource(R.drawable.img)).draggable(true));

                            hashMap.put(key, marker);
                        } else {
                            marker.setPosition(location);
                        }
                }

                @Override
                public void onChildChanged(@NonNull final DataSnapshot dataSnapshot, @Nullable String s) {
                        String key1 = dataSnapshot.getKey();
                        Log.d(TAG, "Location for '" + key1 + "' was updated.");

                        Double latitude = dataSnapshot.child("latitude").getValue(Double.class);
                        Double longitude = dataSnapshot.child("longitude").getValue(Double.class);

                        LatLng location = new LatLng(latitude, longitude);

                        Marker marker34 = hashMap.get(key1);

                        if (marker34 == null) {
                        marker34 = mMap.addMarker(new MarkerOptions().position(location).icon(BitmapDescriptorFactory.fromResource(R.drawable.img)).draggable(true));

                        hashMap.put(key1, marker34);

                        } else {
                            marker34.setPosition(location);
                        }
                }

                @Override
                public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                        String key = dataSnapshot.getKey();
                        Log.d(TAG, "Location for '" + key + "' was removed.");

                        Marker marker = hashMap.get(key);
                        if (marker != null) {
                            marker.remove();
                        }
                }

                @Override
                public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                        Log.d(TAG, "Priority for " + dataSnapshot.getKey() + " was changed.");
                        }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Log.w(TAG, "markerUpdateListener:onCancelled", databaseError.toException());
                }
            });
→ Ссылка