2016-07-29 17 views
7

डेटा के विशिष्ट सूची प्राप्त करने मैं firebase और nosql डेटाबेसकैसे से firebase

लिए नया हूँ मैं एक Firebase से कुछ विशिष्ट डेटा पुनः प्राप्त करने की कोशिश कर रहा हूँ। मेरे पास नोड universities है और उस नोड में नोड के रूप में कई अद्वितीय पहचानकर्ता हैं जिनके पास इतना अधिक डेटा है। मैं प्रत्येक नोड से name पुनर्प्राप्त करना चाहता हूं।

कृपया इसे देखें।

enter image description here

क्या मैं अब तक की कोशिश की है: मैं addChildEventListener उपयोग करने की कोशिश लेकिन यह केवल पहला बच्चा सुनता है। मैंने इसे डीबग किया है और यह केवल universities नोड के पहले बच्चे के मान दिखा रहा था।

myRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      List<University> university = new ArrayList<>(); 
      Map<String, Object> td = (HashMap<String, Object>) dataSnapshot.getValue(); 

      Log.d("TAG",dataSnapshot.getValue().toString()); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

मैंने addValueEventListener भी कोशिश की है। यह पूरे नोड को सुनता है और पूरे डेटा को वापस करता है, लेकिन इसके लिए मैं "नाम" निकालने में असमर्थ हूं क्योंकि इसमें अद्वितीय पहचानकर्ता शामिल हैं।

कृपया मुझे सही दिशाओं में मार्गदर्शन करें।

myRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       University university = dataSnapshot.getValue(University.class); 
       List<University> universities = (List<University>) dataSnapshot.getValue(University.class); 
       *//*List<String> lst = new ArrayList<String>(); 

      for(DataSnapshot dsp : dataSnapshot.getChildren()){ 
       lst.add(dsp.getKey()); 
      } 
      Log.d("TAG",lst.toString());*//* 

      Map<String, Object> td = (HashMap<String, Object>) dataSnapshot.getValue(); 


      *//*List<Object> values = new ArrayList<Object>(td.values()); 
      List<String> list=new ArrayList<String>(); 
      for(int i=0; i<values.size(); i++){ 
       list.add((String) values.get(i)); 
      }*//* 
      Log.d("TAG", university.toString()); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

उत्तर

13

मिल जाएगा आप addValueEventListener का उपयोग कर के लिए Firebase

List<University> universityList = new ArrayList<>(); 
myRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     universityList.clear(); 
     for (DataSnapshot postSnapshot: snapshot.getChildren()) { 
      University university = postSnapshot.getValue(University.class); 
      universityList.add(university); 

      // here you can access to name property like university.name 

     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     System.out.println("The read failed: " + firebaseError.getMessage()); 
    } 
}); 

से सभी विश्वविद्यालय को पुनः प्राप्त या यदि आप addChildEventListener

List<University> universityList = new ArrayList<>(); 
myRef.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     University university = dataSnapshot.getValue(University.class); 
     universityList.add(university); 
     Log.i(TAG,"add university name = " + university.name); 
     ... 
    } 
    ... 
} 
का उपयोग कर
+0

ठीक है मैंने पहली विधि का उपयोग किया था। वह विधि सूची हैशैप प्रकार डेटा सूची में। मेरा मतलब है कि अब कुल 3 सूचकांक है। और प्रत्येक अनुक्रमणिका में हैशैप प्रकार का डेटा होता है। और मैं इसका नाम प्राप्त करना चाहता हूं। मैं यह कैसे करूंगा? –

+0

मुझे लगता है कि आपकी पोस्ट में उपयोग करने का तरीका अलग है। मेरे कोड में (एक विधि में), लूप के अंदर आपको यूनिवर्सिटी ऑब्जेक्ट मिलेगा, और इसका उपयोग विश्वविद्यालय द्वारा नाम संपत्ति तक पहुंच सकता है। नाम –

+0

धन्यवाद, धन्यवाद –

1

आप Query की equalTo() का उपयोग कर सकते है जिसमें आप firebase डाटाबेस के साथ मैच के लिए अपने कस्टम स्ट्रिंग पारित कर सकते हैं।

इस तरह से आपको लगता है कि

Query queryRef = myFirebaseRef.orderByChild("name").equalTo("some name"); 

के साथ अपने क्वेरी और श्रोता सेट बना सकते हैं की तरह अधिक के लिए this धागा देखें।

Here firebase अधिकारियों से अच्छा उदाहरण है, कि देखें और आप स्पष्ट रूप से पता

+0

क्या यह प्रश्न मुझे विश्वविद्यालय के नोड के प्रत्येक बच्चे से नाम वापस कर देगा? '' क्वेरी क्वेरी Ref = myFirebaseRef.orderByChild ("name") '' '? –

+0

@ ज़ीशन शबीर नहीं, यह संपत्ति नाम मूल्यों द्वारा आदेशित सभी उपयोगकर्ताओं को वापस कर देगा। – MeLine

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