#android #firebase #firebase-realtime-database #data-retrieval
#Android #firebase #firebase-база данных в реальном времени #извлечение данных
Вопрос:
В моей базе данных Firebase я установил его следующим образом:
Широта и долгота представлены 0
и 1
соответственно. В настоящее время я использую жестко запрограммированный метод для получения широты, долготы и имени:
Firebase locationRef = mRootRef.child("loc");
locationRef.addValueEventListener(new com.firebase.client.ValueEventListener() {
@Override
public void onDataChange(com.firebase.client.DataSnapshot dataSnapshot) {
Double latitude = dataSnapshot.child("0").getValue(Double.class);
Double longitude = dataSnapshot.child("1").getValue(Double.class);
String name = dataSnapshot.child("name").getValue(String.class);}
@Override
public void onCancelled(FirebaseError firebaseError) {
throw firebaseError.toException();
}
});
Теперь я устанавливаю свои данные, как показано на изображении:
Как я могу получить значение данных переменной ( 0
, 1
и name
) для loc1 и loc2 таким образом, чтобы я мог легко получить их без жесткого кодирования. В будущем количество местоположений также будет увеличиваться.
Ответ №1:
Я думаю, вам нужно что-то вроде следующего
Необходимо добавить getChildren() для каждого, он предоставит все ваше местоположение в loc. вы также можете использовать эту информацию в каком-либо другом массиве
Firebase locationRef = mRootRef.child("loc");
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);
String name = snapm.child("name").getValue(String.class);}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
throw firebaseError.toException();
}
});