回答
在你的项目,你需要有代表“驱动程序”实体POJO。喜欢的东西:
public class Driver {
private String age;
private String busNum;
// etc ...
private HashMap<String, Object> Latlng;
public Driver() {
}
// getters ...
public HashMap<String, Object> getLatlng() {
return Latlng;
}
}
在Firebase
,内部对象必须声明具有HashMaps<String, Object>
,其中String
是关键和Object
可以在你的模型中的任何其他对象(在你的情况下,Float
我敢打赌) 。现在
,如果你想读一些价值只有一次,只需调用addListenerForSingleValueEvent
方法,像这样:
FirebaseDatabase.getInstance()
.getReferenceFromUrl(URL_DRIVERS)
.child(driverKey)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Driver driver = dataSnapshot.getValue(Driver.class);
// And here you can access Latlng object
latitude = driver.getLatlng().get("latitude");
longitude = driver.getLatlng().get("longitude");
}
@Override
public void onCancelled(DatabaseError databaseError) {
// handle error ...
}
});
注:URL_DRIVERS将是您的根节点URL(https://your-project.firebaseio.com/)加上你的驱动程序节点位置(你的情况“驱动程序”)
如果你只是想知道如何得到这些值一次,那么它是这样的:
String lat;
String lon;
String userId = // [get userID from firebase]
String mDatabase = // [get database ref from firebase]
mDatabase.child("Driver").child(userId).child("Latlng").addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
lat = dataSnapshot.child("latitude").getValue();
lon = dataSnapshot.child("longitude").getValue();
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "getUser:onCancelled", databaseError.toException());
// ...
}
});
如果您想要实时跟踪动作,那是不同的,但答案仍然在我之前提供的链接中提供。 –
您的意思是“纬度”和“经度”(字符串),而不是简单的经度和纬度? – josemigallas
@josemigallas这是简单的经纬度 – tin
我可以从你共享你是在驱动节点推值数据的屏幕快照了解,所以如果我猜测的权利,它不是用户ID,你可以获取并传入代码(如其他答案中所述)。
在这种情况下,你必须得到驱动节点
1)干燥机创建实体的POJO的快照,Driver.class
public class Driver {
private String age;
private String busNum;
// etc ...
private HashMap<String, Object> Latlng;
public Driver() {
}
// add all getters and setters...
public HashMap<String, Object> getLatlng() {
return Latlng;
}}
在您的活动类
DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Driver");
mDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("There are total" + dataSnapshot.getChildrenCount() + " values");
for (DataSnapshot driverSnapshot: dataSnapshot.getChildren()) {
SampleContent content= driverSnapshot.getValue(Driver.class);
System.out.println(content.getLatlng().toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
注:我没有运行的代码可能有语法错误,请原谅我。
另请参阅https://firebase.google.com/docs/database/android/retrieve-data了解更多详情。
https://firebase.google.com/docs/database/android/retrieve-data –
为什么你会评价我!如果你知道这个问题,那就回答我吧。不要投下来! – tin