【问题标题】:How to get the key of a child node in Firebase Realtime Database after choosing a child randomly随机选择子节点后如何在Firebase实时数据库中获取子节点的密钥
【发布时间】:2020-09-03 22:57:17
【问题描述】:

我想获取Firebase实时数据库中子节点的key,也就是UID。我正在随机选择一个子节点,现在我想获取该子节点的密钥,以便对其进行进一步的操作。

databaseReferencePickers.addListenerForSingleValueEvent(new ValueEventListener() {
     @Override
     public void onDataChange(DataSnapshot dataSnapshot) {
         try {
            int pickerCount = (int) dataSnapshot.getChildrenCount();
            Random random = new Random();
            int rand = random.nextInt(pickerCount);
            Iterator itr = dataSnapshot.getChildren().iterator();

            for(int i = 0; i <= rand; i++) {
                itr.next();
            }

            pickerDetails = itr.next().toString();

            ObjectMapper oMapper = new ObjectMapper();
            map = oMapper.convertValue(itr.next(), Map.class);
            //pickerUID = Objects.requireNonNull(map.get("key")).toString();
            pickerUID = dataSnapshot.getKey();
            Toast.makeText(OrderPickupActivity.this,pickerUID,Toast.LENGTH_LONG).show();

         } catch (Exception e) {
              Toast.makeText(OrderPickupActivity.this, e.toString(), Toast.LENGTH_LONG).show();
         }
     }

     @Override
     public void onCancelled(DatabaseError databaseError) {

     }
});

你能帮帮我吗?每当我敬酒“PickerUID”的值时,我得到的值为 null

Here is the image.

我想从选择器部分检索密钥。

【问题讨论】:

  • 请将您的数据库结构添加为 JSON 文件或至少是屏幕截图,并指明您想要获取的确切数据。
  • 请将其添加到您的问题中,而不是作为外部链接。你可以使用imgbb.com
  • 我试过了,现在检查问题
  • “该页面不存在”。
  • 我现在更改了链接

标签: java android firebase firebase-realtime-database random


【解决方案1】:

如果您想通过在Pickers 节点上附加监听器来获得随机的uid,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference pickersRef = rootRef.child("Pickers");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> uids = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String uid = ds.getKey();
            uids.add(uid);
        }

        String randomUid = new Random().nextInt(uids.size());
        //Do what you need to do with this random uid
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(TAG, "Error: ", task.getException()); //Don't ignore errors!
    }
};
pickersRef.addListenerForSingleValueEvent(valueEventListener);

看,您必须使用getChildren() 方法遍历DataSnapshot 对象才能获得结果。但是,这并不是最好的解决方案,因为您下载了整个 Pickers 节点,以获取单个随机 id。如需更感谢的解决方案,还请查看我在以下帖子中的回答:

【讨论】:

  • 我应该为它创建一个新的机器学习套件还是一个云功能?
  • “它不起作用”,对我没有帮助,帮助您解决问题。向我展示您的新数据库架构和您正在使用的 EXACT 代码。我亲自测试过,效果很好。
猜你喜欢
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多