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.
Nguồn
2016-08-16 04:39:13
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
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. –