【发布时间】:2022-01-03 23:21:21
【问题描述】:
private final HashMap<String, Marker> hm=new HashMap<String, Marker>();
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.getUiSettings().setZoomControlsEnabled(true);
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference userLocationRef = db.child("UserLocation");
db.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
userLocationRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
for (DataSnapshot ds : task.getResult().getChildren()) {
String userID = String.valueOf(ds.child("userID").getValue());
double lat = ds.child("You").child("l").child("0").getValue(Double.class);
double lng = ds.child("You").child("l").child("1").getValue(Double.class);
Log.d("TAG", lat + ", " + lng); //Check the values
Log.d("TAG", userID+"hi"); //Check the values
//Add location on Google Map
LatLng location = new LatLng(lat, lng);
if (hm.containsKey(userID)) {
hm.get(userID).remove();
}
currentLocationMarker = mMap.addMarker(new MarkerOptions().position(location).title(userID));
currentLocationMarker.showInfoWindow();
hm.put(userID, currentLocationMarker);
}
} else {
Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
}
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});}
上述代码用于从实时 Firebase 中检索多个用户的实时位置。 实时firebase的结构如下图所示:
当多个用户的位置发生变化时,标记开始更新用户的位置,但问题是当标记开始更新用户的新位置时,用户的旧标记并没有被删除。
那么,问题是如何去除多个标记的旧标记,而地图只能为每个用户显示一个标记?如果您能提供帮助,谢谢!
【问题讨论】:
-
尝试将
addMarker返回的markers保存在map对象中(我建议hashmap)并使用marker.remove删除重复的标记。来源:Remove old markers on Google Map-安东尼 -
如果您使用
hashmap,您可以使用.contains或其他实现的条件来跟踪哪个用户已经有标记并删除以前的标记。 -
声明
private HashMap<string, Marker> hm=new HashMap()<>,用String g=ds.child("you").child("g")获取g作为字符串(添加getValue),检查if(hm.contains(g))(替换你原来的if)然后hm.get(g).remove()在if中删除标记如果是。最后,像往常一样创建标记并使用hm.put(g, marker)将其放入哈希图中。 -
当您使用
hm.get(userid).remove()而不是hm.remove(userID)时会发生什么?。 -
有效!!!非常感谢!
标签: java android firebase firebase-realtime-database