我可以在地图上插入多个标记。但是,当我插入 Firebase 数据库时,只有最后放置的标记被插入。我想我必须使用某种列表或哈希图。
POJO类:
public class FirebaseMarker {
String address;
String time;
double latitude;
double longitude;
String routeId;
public FirebaseMarker() {
}
public FirebaseMarker(String address, String time, double latitude, double longitude, String routerId) {
this.address = address;
this.time = time;
this.latitude = latitude;
this.longitude = longitude;
this.routeId = routerId;
}
public String getRouterId() {
return routeId;
}
public void setRouterId(String routerId) {
this.routeId = routerId;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
}
标记创建:
List<Marker> markers;
markers = new ArrayList<>();
Marker marker = mMap.addMarker(new MarkerOptions()
.position(latLng)
.title(address)
.snppet(time)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
markers.add(marker);
我如何插入:
//FirebaseMarker marker = new FirebaseMarker(address, time, latitude, longitude, routeId);
markerId = userRef.push().getKey();
userRef.child(sharedPreferences.getString("school",null)).child("markers").child(markerId).setValue(markers);
这些参数均来自用户输入和地理编码器
看起来您有将标记正确保存到数据库的一般前提,但是您需要首先将每个标记存储在内存中,以便稍后能够将它们保存到数据库中。
为此,您可以使用HashMap
简化保存:
HashMap<String, Object> markers = new HashMap<>();
public void createMarker(String routeId, LatLng latLng, String address, String time) {
// Create a unique ID for this marker (but don't actually store it yet)
String markerId = schoolReference.child("markers").push().getKey();
// Add the marker to the HashMap
FirebaseMarker marker = new FirebaseMarker(address, time, latLng.getLatitude(), latLng.getLongitude(), routeId);
markers.put(markerId, marker);
// Add an actual map marker to the map
mMap.addMarker(new MarkerOptions()
.position(latLng)
.title(address)
.snppet(time)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))
);
}
在此示例中,当您创建标记时(在createMarker()
方法),在实际向地图添加标记之前,您需要执行 3 个附加操作:
- 为该标记生成一个唯一的 ID,使用
push()
(这里不联系数据库)
- 创建一个
FirebaseMarker
稍后可以使用的实例
- 添加这个唯一的 ID 并
FirebaseMarker
配对到HashMap
然后,当您想将这些保存到数据库时,只需推送整个HashMap
到数据库中通过使用执行多位置更新updateChildren():
public void saveToDatabase() {
// Do your thing to save the route
// Save the markers to the database in one write operation
schoolReference.child("markers").updateChildren(markers);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)