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

问题描述 投票:1回答:1

我正在创建一个使用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();

            }

谢谢。

java android google-maps firebase marker
1个回答
0
投票

创建一个将用户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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.