我有这个firebase数据库
我需要收到用户的所有电话号码,我应该使用哪个听众来收集所有的孩子?
每个用户被添加为一个对象,用户ID作为该对象的名称,我需要检索这个对象,而不知道用户ID
我搜索的文档,它与DataSnapshot相关,但我无法得到没有监听器的DataSnapshot!寻求DataSnapshout是正确的,还是使用别的东西
解决方法
首先检索您的用户数据快照.
//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 } });
然后循环访问用户,访问他们的地图并收集电话字段.
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()); }
这个监听器只有在显式调用时才会检索数据捕获.考虑除了您的用户节点之外,还存储“allPhoneNumbers”节点下的数字列表.这将使您的数据更新更轻,更容易处理时收集所有数字.如果你说数百个用户,“用户”数据快照将会变得太大,“allPhoneNumbers”列表的效率会更高.
上面的代码已经在您的示例数据库上进行了测试,并且工作正常但是,根据用户的电话实例字段的类型,您的手机字段可能需要转换为String或int.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。