2017-07-24 13 views
5

To moja struktura danych: enter image description hereUzyskaj ostatni element w zagnieżdżonych bazie Firebase android

Tutaj chcę odzyskać Szerokość i długość geograficzna ostatniego elementu Lokalizacja dziecka oparciu o id = " sd ".

Oto kod:

Query query = mDatabase.child("Users").orderByChild("Id").equalTo(busId); 
// busId = "sd" 
query.addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        for(DataSnapshot user : dataSnapshot.getChildren()) { 
         Query lastItem = user.getRef().child("Location").orderByKey().limitToLast(1); 
         lastItem.addListenerForSingleValueEvent(new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) { 
           String lat = dataSnapshot.child("Latitude").getValue().toString(); 
          } 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 

          } 
         }); 
         break; 
        } 
       } 

W jaki sposób można to zrobić? Dzięki

+0

Oto dokumentacja dla Androida [zapytań] (https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot) –

+0

Czy mógłbyś wyjaśnić nieco więcej. Nie mogłem tego zrozumieć. Jestem dla niego bardzo nowy. Zaktualizowałem kod do sprawdzenia. Dzięki. – Sagaryal

+0

Dobra robota! Nie jestem ekspertem od androidów, zawsze używałem javascript, ale spróbuję na to spojrzeć;) –

Odpowiedz

3

Proszę użyć tego kodu dla Androida:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference userRef = rootRef.child("Users"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String Id = ds.child("Id").getValue(String.class); 
      if(Id.equals("sd")) { 
       Query q = ds.child("Location").getRef().orderByKey().limitToLast(1); 

       ValueEventListener valueEventListener = new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         for(DataSnapshot child : dataSnapshot.getChildren()) { 
          Double latitude = child.child("Latitude").getValue(Double.class); 
          Double longitude = child.child("Longitude").getValue(Double.class); 
          Log.d("TAG", latitude + "/" + longitude); 
         } 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) {} 
       }; 
       q.addListenerForSingleValueEvent(valueEventListener); 
      } 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
userRef.addListenerForSingleValueEvent(eventListener); 
+0

Pętla for nie jest wykonywana. Nie wchodzi w pętlę. Możliwe, że jest pusty. Dowolny pomysł? – Sagaryal

+0

Proszę zobaczyć moją zaktualizowaną odpowiedź. Właściwie to nie przetestowałem go, po prostu go zakoduj. Czy to działa? –

+0

Otrzymuję java.lang.NullPointerException w "String lat = dataSnapshot .....". ToString() błąd określający toString() jest odwołanie do obiektu zerowego, co oznacza, że ​​wiersz podając wartość null. I po tym aplikacja przestaje. Myślę więc, że pętla jest konieczna. Zawsze otrzymuję wskaźnik zerowy. – Sagaryal