2016-07-29 15 views
7

Tôi mới vào firebasenosql cơ sở dữ liệuLàm thế nào để lấy danh sách cụ thể của dữ liệu từ căn cứ hỏa lực

tôi đang cố gắng để lấy một số dữ liệu cụ thể từ một căn cứ hỏa lực. Tôi có một nút universities và nút đó có nhiều số nhận dạng duy nhất làm nút có nhiều dữ liệu hơn trong đó. Tôi muốn truy xuất name từ mỗi nút.

Vui lòng xem điều này.

enter image description here

Những gì tôi đã cố gắng cho đến nay: Tôi cố gắng sử dụng addChildEventListener nhưng điều này chỉ nghe đứa con đầu lòng. Tôi đã gỡ lỗi nó và nó chỉ hiển thị các giá trị của đứa con đầu tiên của nút 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) { 

     } 
    }); 

Tôi cũng đã thử addValueEventListener. Điều này nghe toàn bộ nút và trả về toàn bộ dữ liệu, nhưng tôi không thể trích xuất "tên" cho nó vì nó chứa các định danh duy nhất.

Vui lòng hướng dẫn tôi đi đúng hướng.

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) { 

     } 
    }); 

Trả lời

13

Nếu bạn sử dụng addValueEventListener cho lấy tất cả các trường đại học từ căn cứ hỏa lực

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

Hoặc nếu bạn sử dụng 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

ok tôi đã sử dụng phương pháp đầu tiên. Phương pháp đó. Lưu trữ dữ liệu kiểu hashMap vào danh sách. Tôi có nghĩa là nó có tổng cộng 3 chỉ số bây giờ. Và mỗi chỉ mục chứa loại dữ liệu HashMap. Và tôi muốn lấy tên của nó. tôi sẽ làm như thế nào? –

+0

Tôi thấy cách sử dụng bằng cách sử dụng trong bài đăng của bạn là khác nhau. trong mã của tôi (trong một phương thức), bên trong vòng lặp for bạn sẽ nhận được đối tượng Univerty, và sử dụng có thể truy cập vào thuộc tính name theo university.name –

+0

cảm ơn bạn nó đã giúp –

1

Bạn có thể sử dụng bằngTo() của Query trong đó bạn có thể chuyển chuỗi tùy chỉnh của mình để khớp với cơ sở dữ liệu firebase.

như cách này bạn có thể tạo Query của bạn và thiết lập người nghe với điều đó

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

tham khảo this chủ đề để biết thêm.

Here là tốt đẹp ví dụ từ các quan chức căn cứ hỏa lực, tham khảo đó và bạn sẽ nhận được ý tưởng rõ ràng

+0

truy vấn này sẽ trả về tên của tôi từ mỗi nút con của các trường đại học? '' 'Query queryRef = myFirebaseRef.orderByChild (" name ")' ''? –

+0

@Zeeshan Shabbir Không, nó sẽ trả về tất cả người dùng được sắp xếp theo giá trị tên thuộc tính. – MeLine

Các vấn đề liên quan