[随机选择一个子节点后如何在Firebase Realtime数据库中获取一个子节点的密钥

问题描述 投票:0回答:1

我想在Firebase实时数据库(也是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.

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

java android firebase firebase-realtime-database random
1个回答
0
投票

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

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

请参见,您必须使用DataSnapshot方法遍历getChildren()对象以获得结果。但是,这并不是最佳解决方案,因为您下载了整个Pickers节点以获取单个随机ID。对于更赞赏的解决方案,请同时从以下帖子中查看我的回答:

© www.soinside.com 2019 - 2024. All rights reserved.