2016-08-16 21 views
19

Tôi có cơ sở dữ liệu căn cứ hỏa lực nàyLàm cách nào để lấy dữ liệu của tất cả trẻ em trong cơ sở dữ liệu firebase?

enter image description here

và tôi cần để có được tất cả các số điện thoại của người dùng, mà người nghe tôi sẽ sử dụng để nhận được tất cả childes?

Mỗi người dùng được thêm vào như là một đối tượng với người sử dụng ID là một tên của đối tượng đó, tôi cần phải lấy này đối tượng mà không biết rằng sử dụng ID

Tôi đã tìm kiếm tài liệu, nó liên quan đến DataSnapshot nhưng tôi couldn Không nhận được một DataSnapshot mà không có người nghe! có đúng khi tìm kiếm DataSnapshout hay tôi sẽ sử dụng một cái gì đó khác

Trả lời

26

Trước tiên hãy truy xuất dữ liệu người dùng của bạn.

//Get datasnapshot at your "users" root node 
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users"); 
    ref.addListenerForSingleValueEvent(
      new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        //Get map of users in datasnapshot 
        collectPhoneNumbers((Map<String,Object>) dataSnapshot.getValue()); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 
        //handle databaseError 
       } 
      }); 

Sau đó lặp lại người dùng, truy cập bản đồ và thu thập trường điện thoại.

private void collectPhoneNumbers(Map<String,Object> users) { 

    ArrayList<Long> phoneNumbers = new ArrayList<>(); 

    //iterate through each user, ignoring their UID 
    for (Map.Entry<String, Object> entry : users.entrySet()){ 

     //Get user map 
     Map singleUser = (Map) entry.getValue(); 
     //Get phone field and append to list 
     phoneNumbers.add((Long) singleUser.get("phone")); 
    } 

    System.out.println(phoneNumbers.toString()); 
} 

Trình nghe này sẽ chỉ truy xuất nguồn dữ liệu khi được gọi rõ ràng. Xem xét việc lưu trữ danh sách các số dưới nút "allPhoneNumbers" ngoài nút người dùng của bạn. Điều này sẽ làm cho các bản sao dữ liệu của bạn nhẹ hơn và dễ dàng hơn để xử lý khi thu thập tất cả các số. Nếu bạn đã nói hàng trăm người dùng, dữ liệu "người dùng" sẽ là quá lớn và danh sách "allPhoneNumbers" sẽ hiệu quả hơn nhiều.

Mã trên đã được thử nghiệm trên cơ sở dữ liệu mẫu của bạn và không hoạt động. Tuy nhiên, trường điện thoại của bạn có thể cần phải được nhập vào chuỗi hoặc int tùy thuộc vào loại trường hợp của cá thể điện thoại của người dùng của bạn.

+0

cảm ơn tất cả, và tôi sẽ sử dụng khóa cho 'allPhoneNumbers' thực sự là ý tưởng sáng tuyệt vời – mxml

+0

tuyệt vời. một mẹo cá nhân với firebase là làm tất cả những thứ khó khi viết vào firebase (setValue/updateChildren) vì bạn có nhiều quyền kiểm soát hơn về cách viết. Khi đọc, bạn có ít quyền kiểm soát vì bạn phải lấy mọi thứ dưới nút bằng trình nghe không đồng bộ. Do đó, bằng cách tổ chức dữ liệu của bạn tại thời điểm viết, bạn đọc dữ liệu dễ dàng hơn nhiều. –

7
 DatabaseReference ref1= FirebaseDatabase.getInstance().getReference(); 
     DatabaseReference ref2,ref3,ref4;  
     ref2 = ref1.child("User"); 


     ref2.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      Userlist = new ArrayList<String>();     
      // Result will be holded Here 
      for (DataSnapshot dsp : dataSnapshot.getChildren()) { 
        Userlist.add(String.valueOf(dsp.geValue())); //add result into array list 

       } 
    /* userlist will store all values of users, then point to every userlist item 
    and get mobile numbers*/ 
+0

cảm ơn tất cả, bạn đã làm cho nó rất rõ ràng – mxml

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