【发布时间】:2019-12-10 15:18:01
【问题描述】:
我正在尝试使用我的 firebase 数据库在 android 中创建一个测验,在此,我希望随机生成不重复的问题。
到目前为止,我已经成功开发了一个随机生成问题的测验,尽管同样的问题可以重复。
例如: 我问了四个问题,这些都是从我的 firebase 数据库中提取的,我的任何问题都可以使用。在问题 1 中可能会显示 id 为 4 的问题。问题 2 可能会再次显示 id 为 4 的问题,因为没有什么可以说问题 4 无法显示。
FirebaseAuth mFirebaseAuth = FirebaseAuth.getInstance();
FirebaseUser user = mFirebaseAuth.getCurrentUser();
userid = Objects.requireNonNull(user).getUid();
mRootRef = FirebaseDatabase.getInstance().getReference().child("Review Questions");
if(total >4) {
description.setText("Completed");
details();
}
else
{
int n = rand.nextInt(9);
int n2 = n +1;
//if the number has been selected, so add the selected items to a list.
DatabaseReference databaseref = FirebaseDatabase.getInstance().getReference().child("Questions").child("Plastic").child(String.valueOf(n2));
databaseref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
final Question question = dataSnapshot.getValue(Question.class);
t1_question.setText(Objects.requireNonNull(question).getQuestion());
b1.setText(question.getAnswer1());
b2.setText(question.getAnswer2());
b3.setText(question.getAnswer3());
b4.setText(question.getAnswerCorrect());
这是我的原始代码,我想如果我将所有问题添加到数组列表中,那么每次我提出问题时,我都可以简单地从数组中删除该问题。
我已经尝试过这种方式:
DatabaseReference databaseref = FirebaseDatabase.getInstance().getReference().child("Questions").child("Plastic");
databaseref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
question= dataSnapshot.getValue(Question.class);
list.add(new Question(question.getQuestion(),question.getDifficulty(), question.getAnswer1(),question.getAnswer2(), question.getAnswer3(), question.getAnswerCorrect(),question.getCategory(),question.getId() ,question.getDescription(), question.getScore()));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
x = list.size();
n = rand.nextInt(x);
if(total >4) {
description.setText("Completed");
details();
}
else
{
//declare as a global variable, in the class then access
question = list.get(n);
t1_question.setText(question.getQuestion());
b1.setText(question.getAnswer1());
b2.setText(question.getAnswer2());
b3.setText(question.getAnswer3());
b4.setText(question.getAnswerCorrect());
由于某种原因,这些问题不会添加到我的数组中,我似乎无法理解为什么。有没有更好的解决方案?
【问题讨论】:
-
声明一个整数数组并将生成的id放入其中,每次随机检查该id是否存在于数组中,如果不存在则重新生成另一个id。
标签: java android firebase arraylist firebase-realtime-database