簡體   English   中英

Firebase Realtime Database隨機選擇子節點后如何獲取子節點的key

[英]How to get the key of a child node in Firebase Realtime Database after choosing a child randomly

我想獲取 Firebase Realtime Database 中子節點的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

這是圖像。

我想從選擇器部分檢索密鑰。

如果您想通過在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 object 才能獲得結果。 但是,這並不是最好的解決方案,因為您下載了整個Pickers節點,以便獲得單個隨機 ID。 如需更滿意的解決方案,請同時查看我在以下帖子中的回答:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM