, как получить данные в firebase, когда ребенок вложен из таблицы
выше изображение моей структуры базы данных в firebase. Я не знаю, как получить данные внутри ребенка Latlng
. Как бы я его взял?
, как получить данные в firebase, когда ребенок вложен из таблицы
выше изображение моей структуры базы данных в firebase. Я не знаю, как получить данные внутри ребенка Latlng
. Как бы я его взял?
В вашем проекте, ваша потребность иметь POJO, представляющий «Driver» сущность. Что-то вроде:
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());
// ...
}
});
Если вы хотите отслеживать движения в реальном времени, это другое, но ответ по-прежнему предоставляется в ссылке, которую я дал раньше. –
Вы имели в виду «широта» и «долгота» (String) вместо простой широты и долготы? – josemigallas
@josemigallas это простая широта и долгота – tin
Что я могу понять на снимке экрана, который вы сообщали, что вы нажимаете значения в Узел, так что если я правильно догадываюсь, это не идентификатор пользователя, может получить и передать код (как упоминалось в других ответах).
В этом случае вы должны получить снимок из Driver узла
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