2017-07-24 14 views
5

यह मेरा डेटा संरचना है: enter image description hereनेस्टेड डेटाबेस firebase एंड्रॉयड में अंतिम आइटम प्राप्त

यहाँ मैं अक्षांश और देशांतर की स्थान बच्चाआईडी के आधार पर अंतिम आइटम के प्राप्त करना चाहते हैं = " एसडी "

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; 
        } 
       } 

मैं ऐसा कैसे कर सकते हैं:

यहाँ कोड है? धन्यवाद

+0

यहाँ के लिए एंड्रॉयड [प्रश्नों] प्रलेखन (https://firebase.google.com/docs/reference/android/com/google/firebase/database है/डेटा स्नैपशॉट) –

+0

क्या आप थोड़ा और समझा सकते हैं। मैं इसे समझ नहीं सका। मैं इसके लिए बहुत नया हूँ। मैंने समीक्षा करने के लिए कोड अपडेट किया है। धन्यवाद। – Sagaryal

+0

ठीक है! मैं एंड्रॉइड विशेषज्ञ नहीं हूं, मैंने हमेशा जावास्क्रिप्ट का उपयोग किया है, लेकिन मैं इसे देखने की कोशिश करूंगा;) –

उत्तर

3

Android के लिए इस कोड का उपयोग करें:

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

लूप के लिए निष्पादित नहीं किया गया है। यह पाश के लिए अंदर नहीं जाता है। ऐसा इसलिए हो सकता है क्योंकि यह खाली है। कोई उपाय? – Sagaryal

+0

कृपया मेरा अद्यतन उत्तर देखें। मैंने वास्तव में इसका परीक्षण नहीं किया था, बस इसे कोड करें। क्या यह काम करता है? –

+0

मुझे "स्ट्रिंग लैट = डेटा स्नैपशॉट ....." में java.lang.NullPointerException मिलता है। ToString() को स्ट्रिंग() को बताते हुए त्रुटि शून्य ऑब्जेक्ट का संदर्भ है जिसका अर्थ है कि रेखा शून्य को दे रही है। और उसके बाद उस ऐप बंद हो जाता है। तो मुझे लगता है कि लूप के लिए जरूरी है। मैं हमेशा शून्य सूचक मिलता है। – Sagaryal

संबंधित मुद्दे