如何获得Firebase节点的随机子级? [英] How does one get a random children of a Firebase node?
问题描述
首先,这是我的数据库结构:
我的目标是从"DE"节点获取一个随机的Question对象,以便以后显示它,并且由于没有内置的查询随机子对象的支持,我必须以某种方式自己从该迭代器中获取一个随机Object. /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(){}
});
基本上,您只需要做足够的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) {
}
});
First off, here's my Database structure:
My goal was to get a random Question object from the "DE" node to later display it, and as there's no builtin support for querying a random child I have to get a random Object myself, from that iterator, somehow.
Currently, I have this code, but am confused on how to string it together:
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(){}
});
Basically, you just have to do enough itr.next()
until the iterator is at the n
th position (where n
is the random number from nextInt()
) and then you can simply get the Object you want with getValue()
, the example below should show it well:
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) {
}
});
这篇关于如何获得Firebase节点的随机子级?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!