首先,这是我的数据库结构:
我的目标是从“DE”节点获取一个随机的Question对象以便稍后显示它,并且由于没有内置支持查询随机子节点,我必须自己从该迭代器获取一个随机对象。 / p>
目前,我有这段代码,但对于如何将它串在一起很困惑:
DatabaseReference questionsRef = FirebaseDatabase.getInstance().getReference().child("questions").child("DE");
questionsRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int questionCount = (int) dataSnapshot.getChildrenCount();
int rand = random.nextInt(questionCount);
Iterator itr = dataSnapshot.getChildren().iterator();
}
// onCancelled(){}
});
答案 0 :(得分:1)
基本上,你需要做足够的itr.next()
,直到迭代器位于n
位置(其中n
是来自nextInt()
的随机数)然后你可以使用getValue()
简单地获取您想要的对象,下面的示例应该很好地显示它:
questionsRef = FirebaseDatabase.getInstance().getReference().child("questions").child("DE");
questionsRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int questionCount = (int) dataSnapshot.getChildrenCount();
int rand = random.nextInt(questionCount);
Iterator itr = dataSnapshot.getChildren().iterator();
for(int i = 0; i < rand; i++) {
itr.next();
}
childSnapshot = (DataSnapshot) itr.next();
question = childSnapshot.getValue(Question.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});