如何使用来自 Firebase Google 地图 API Android 的数据更新标记位置
How to update marker positions with data from 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<String, Marker> 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);
}
}
我正在创建一个使用 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<String, Marker> 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);
}
}