我想在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。
我想从选择器部分检索密钥。
如果要通过在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。对于更赞赏的解决方案,请同时从以下帖子中查看我的回答: