自firebase以来删除标记时删除
Posted
技术标签:
【中文标题】自firebase以来删除标记时删除【英文标题】:remove marker when is deleted since firebase 【发布时间】:2018-11-24 12:38:12 【问题描述】:我是 android 新手,我按照以下教程进行操作: https://codelabs.developers.google.com/codelabs/realtime-asset-tracking/index.html#0
为了实时跟踪,好吧,我的问题是在firebase中删除标记时如何从地图中删除,代码如下:
private void subscribeToUpdates()
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("locations").child("unidad_1");
ref.addChildEventListener(new ChildEventListener()
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName)
setMarker(dataSnapshot);
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName)
setMarker(dataSnapshot);
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName)
@Override
public void onChildRemoved(DataSnapshot dataSnapshot)
removeMarker(dataSnapshot);
@Override
public void onCancelled(DatabaseError error)
Log.d(TAG, "Failed to read value.", error.toException());
);
private void removeMarker(DataSnapshot dataSnapshot)
String key = dataSnapshot.getKey();
HashMap<String, Object> value = (HashMap<String, Object>) dataSnapshot.getValue();
if (!mMarkers.containsKey(key))
mMarkers.remove(key);
private void setMarker(DataSnapshot dataSnapshot)
// When a location update is received, put or update
// its value in mMarkers, which contains all the markers
// for locations received, so that we can build the
// boundaries required to show them all on the map at once
String key = dataSnapshot.getKey();
HashMap<String, Object> value = (HashMap<String, Object>) dataSnapshot.getValue();
double lat = Double.parseDouble(value.get("latitude").toString());
double lng = Double.parseDouble(value.get("longitude").toString());
LatLng location = new LatLng(lat, lng);
if (!mMarkers.containsKey(key))
mMarkers.put(key, mMap.addMarker(new MarkerOptions().title(key).position(location)));
else
mMarkers.get(key).setPosition(location);
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (Marker marker : mMarkers.values())
builder.include(marker.getPosition());
mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 0));
完成这项工作的正确方法是什么? 提前致谢!
【问题讨论】:
请编辑您的问题(下面有一个链接)以包含setMarker
的代码。没有它就很难猜到为什么removeMarker
不起作用。
我已经更新了问题
【参考方案1】:
在您的 removeMarker()
方法中,将您的代码更改为如下所示:
if (mMarkers.containsKey(key))
Marker marker = mMarkers.remove(key);
if(marker != null)
marker.remove();
我假设mMarkers
是HashMap
。在这种情况下,使用remove(key)
删除条目将从您的HashMap
中删除该条目并返回Marker
(如果不存在则返回null)。然后只需使用标记的remove
方法将其从地图中删除。
您的代码的另一个问题是您检查HashMap
是否不包含键。所以该代码可能不会执行。
编辑
您可能将mMarker
和HashMap
与Map
的Marker
混淆了。 “mMarker”对于编码来说不是一个好名字——因为它并不明显。你应该把它改成更明显的东西,比如“mMarkerMap”。
【讨论】:
谢谢它已经奏效了!我会带你改进代码以上是关于自firebase以来删除标记时删除的主要内容,如果未能解决你的问题,请参考以下文章
使用 android studio java Recycler 视图从 Firebase 实时数据库中删除一个节点
覆盖 Firebase 应用的 DefaultInstance。重新初始化:java.lang.IllegalStateException:FirebaseApp 被删除
Vue.js 和 Firebase:删除了一个测试用户,现在所有路由都无法访问并且组件不呈现