как удалять все маркера с карты?
на карту приходит 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());
}
});