我有一个使用Google地图MapView
的应用程序。使用我的地图,我可以插入我保存到Firebase实时数据库的标记。我有一个FirebaseMarker
课程:
public class FirebaseMarker {
String address;
String time;
double latitude;
double longitude;
...
}
在我的片段中,我有一个HashMap
,我放了按键和标记。按下按钮时,这些标记将保存到数据库中。
public class MapFragment extends Fragment implements OnMapReadyCallback {
HashMap<String, Object> markers = new HashMap<>();
public void onMapReady(final GoogleMap googleMap) {
String markerIds = userRef.push().getKey();
FirebaseMarker marker = new FirebaseMarker(address, time, latitude, longitude);
markers.put(markerIds, marker);
}
private void saveToDatabase(){
userRef.child(sharedPreferences.getString("school", null)).child("markers").updateChildren(markers);
}
}
这很好用,但我还想在Firebase的不同节点中添加相同的标记,只有几个属性(PartialMarker
)。这给我带来了问题,因为数据库中始终缺少一个部分标记。因此,如果我在地图上放置3个标记,则只有2个部分标记保存在节点内的数据库中。我做了什么:
public class PartialMarker {
String address;
String time;
..
}
然后我这样做:
public class MapFragment extends Fragment implements OnMapReadyCallback {
HashMap<String, Object> partialMarkers= new HashMap<>();
public void onMapReady(final GoogleMap googleMap) {
for (Map.Entry<String, Object> entry : markers.entrySet()) {
String key = entry.getKey();
FirebaseMarker marker = (FirebaseMarker) entry.getValue();
partialMarkers.put(key, new PartialMarker(marker.getAddress(), marker.getTime()));
}
}
private void saveToDatabase(){
userRef.child(sharedPreferences.getString("school", null)).child("markers").updateChildren(markers);
userRef.child(sharedPreferences.getString("school", null)).child("routes").child(routeId).child("partialMarkers").updateChildren(partialMarkers);
}
}
标记节点:
部分标记节点:
答案 0 :(得分:1)
这可能是在添加最新markers
之前迭代Marker
地图的问题,因此地图不会包含相同数量的项目。
我建议同时创建两个标记,例如:
String markerId = userRef.push().getKey();
FirebaseMarker marker = new FirebaseMarker(address, time, latitude, longitude);
PartialMarker partialMarker = new PartialMarker(address, time)
markers.put(markerId, marker);
partialMarkers.put(markerId, partialMarker);
这样,可以保证两张地图的项目数相同。