2016-09-15 4 views
-1

enter image description here, как получить данные в firebase, когда ребенок вложен из таблицы

выше изображение моей структуры базы данных в firebase. Я не знаю, как получить данные внутри ребенка Latlng. Как бы я его взял?

+0

https://firebase.google.com/docs/database/android/retrieve-data –

+0

Зачем вы оцениваете меня! Если вы знаете этот вопрос, тогда просто ответьте мне. Не путем голосования! – tin

ответ

0

В вашем проекте, ваша потребность иметь 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/) плюс ваше местоположение узла драйвера (в вашем случае «Драйвер»)

0

Если вы просто хотите знать, как получить эти значения один раз, то его что-то вроде этого:

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()); 
      // ... 
     } 
    }); 
+0

Если вы хотите отслеживать движения в реальном времени, это другое, но ответ по-прежнему предоставляется в ссылке, которую я дал раньше. –

+0

Вы имели в виду «широта» и «долгота» (String) вместо простой широты и долготы? – josemigallas

+0

@josemigallas это простая широта и долгота – tin

0

Что я могу понять на снимке экрана, который вы сообщали, что вы нажимаете значения в Узел, так что если я правильно догадываюсь, это не идентификатор пользователя, может получить и передать код (как упоминалось в других ответах).

В этом случае вы должны получить снимок из 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 для получения более подробной информации.

Смежные вопросы