我正在创建一个在线混乱应用程序,其中有一个用于垃圾所有者的登录,另一个用于用户,因此当垃圾所有者在其数据中放置位置时,应该在用户端的地图上标记。
中的数据库结构请建议我访问这些纬度经度值的代码,并在地图上为每个使用位置值注册的混乱创建标记。
答案 0 :(得分:0)
您可以拥有一个根并选择它。然后在该根目录中检索快照中的所有lat / lng。以下是示例代码:
DatabaseReference locationRef = mRootRef.child("locations");
locationRef.addValueEventListener(new com.firebase.client.ValueEventListener() {
@Override
public void onDataChange(com.firebase.client.DataSnapshot dataSnapshot) {
for (DataSnapshot snapm: dataSnapshot.getChildren()) {
Double latitude = snapm.child("0").getValue(Double.class);
Double longitude = snapm.child("1").getValue(Double.class);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
throw firebaseError.toException();
}
});
答案 1 :(得分:0)
EDITED
我建议对数据库结构进行一些小调整......在'MessProviders'下创建另一个名为'locations'的节点,其中包含userID,mProviderLatitude,mProviderLongitude,mProviderBrandName。
。
如果你有一个单独的getter和setter类,那将会很好。我的课程是'CordinatesModel'
private void messLocation() {
DatabaseReference currentDBcordinates = FirebaseDatabase.getInstance().getReference().child("Users").child("MessProviders").child("locations");
currentDBcordinates.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Create an array of markers
int size = (int) dataSnapshot.getChildrenCount(); //
Marker[] allMarkers = new Marker[size];
mMap.clear(); //Assuming you're using mMap
for(DataSnapshot ds : dataSnapshot.getChildren()) {
//Specify your model class here
CordinatesModel cordinatesModel = new CordinatesModel();
//lets create a loop
for(int i=0;i<=size;i++) {
try {
//assuming you've set your getters and setters in the Model class
cordinatesModel.setmProviderLatitude(s.getValue(CordinatesModel.class).getmProviderLatitude());
cordinatesModel.setmProviderLongitude(s.getValue(CordinatesModel.class).getmProviderLongitude());
cordinatesModel.setmProviderBrandName(s.getValue(CordinatesModel.class).getmProviderBrandName());
//lets retrieve the coordinates and other information
Double latitude1 = cordinatesModel.getmProviderLatitude();
Double longitude1 = cordinatesModel.getmProviderLongitude();
String brandName=cordinatesModel.getmProviderBrandName();
//convert the coordinates to LatLng
LatLng latLng = new LatLng(latitude1, longitude1);
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
//Now lets add updated markers
//lets add updated marker
allMarkers[i] = mMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)).position(latLng).title(brandName));enter code here
}catch (Exception ex){}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
答案 2 :(得分:0)
mDb = FirebaseDatabase.getInstance().getReference().child("Users").child("MessProviders").child("zZvkbgUbFohCwtYRfORUM0DBSZR2").child("ProfileInformation");
mDb.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name = dataSnapshot.child("mProviderBrandName").getValue(String.class);
double latt = dataSnapshot.child("mProviderLatitude").getValue(Double.class);
double lngg = dataSnapshot.child("mProviderLongitude").getValue(Double.class);
mMap.addMarker(new MarkerOptions().position(new LatLng(latt, lngg)).title(name));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这是将标记放在地图上的代码,但问题是我手动提供用户ID所以我只创建一个标记,但我想为每个用户创建标记系统如何获取用户ID并创建标记对于每个用户id ??