如何使用Firebase Google Maps API Android中的数据更新标记位置

我正在创建一个使用Firebase数据库实时跟踪用户的应用。 每个用户都使用标记显示在地图中。

当有新的位置更新时,必须更新标记。 问题是,每次检索到新的位置更新时,使用Firebase方法onDataChange()或类似物,我无法访问旧标记以删除它并创建新标记或只更新旧标记,因为标记没有存在。

我尝试使用Gson在SharedPreferences中保存标记,但是当我将标记传递给json时,应用程序崩溃了。

有谁知道如何更新标记?

这是写在onDataChange()中:

for (User user: usersList) { Gson gson = new Gson(); /* String previousJson = preferences.getString(user.getId()+"-marker", ""); Marker previousMarker = gson.fromJson(previousJson, Marker.class); if (previousMarker!=null) markerAnterior.remove(); */ final LatLng latlng = new LatLng(user.getLastLocation().getLatitude(), user.getLastLocation().getLongitude()); MarkerOptions markerOptions = new MarkerOptions() .position(latlng) .title(user.getId()); Marker marker= mMap.addMarker(markerOptions); // String newJson = gson.toJson(marker); //CRASH // editor.putString(user.getId()+"-marker", newJson); // editor.commit(); } 

谢谢。

创建一个将用户ID映射到标记的HashMap实例变量:

 private Map mMarkerMap = new HashMap<>(); 

然后,在HashMap中填充新标记,以便稍后检索它们。

如果标记已存在,只需更新位置:

 for (User user : usersList) { final LatLng latlng = new LatLng(user.getLastLocation().getLatitude(), user.getLastLocation().getLongitude()); Marker previousMarker = mMarkerMap.get(user.getId()); if (previousMarker != null) { //previous marker exists, update position: previousMarker.setPosition(latlng); } else { //No previous marker, create a new one: MarkerOptions markerOptions = new MarkerOptions() .position(latlng) .title(user.getId()); Marker marker = mMap.addMarker(markerOptions); //put this new marker in the HashMap: mMarkerMap.put(user.getId(), marker); } }