我正在尝试创建我的第一个android应用。我创建了与Firebase连接的测验。效果很好,但我只需要随机显示10个问题-总共30个问题。另外,我不想重复这个问题。如何生成随机问题?这是我编写的代码。谢谢
private void updateQuestion() {
mQuestionRef = new Firebase("https://ab-quiz.firebaseio.com/"+ mQuestionNumber +"/biq");
mQuestionRef.addValueEventListener(new com.firebase.client.ValueEventListener() {
@Override
public void onDataChange(com.firebase.client.DataSnapshot dataSnapshot) {
String question = dataSnapshot.getValue(String.class);
mQuestion.setText(question);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
if(mQuestionNumber > 10){
quitFunction();
}
else {
mQuestionNumber++;
}
}
答案 0 :(得分:0)
尝试以下步骤:
使用下面的代码获取列表大小内的随机数。
Random rand = new Random();
int n = rand.nextInt(list.size);
使用list.get(n)
从列表中获取问题。
显示问题后,使用list.remove(n)
从列表中删除项目。
增加您在第2步中显示的问题数量。
达到显示问题的极限后,开始另一个过程。
希望这会有所帮助。
谢谢。
答案 1 :(得分:0)
这是一个可能的答案-
首先,您应该创建一个QuizQuestion.java,您可以在其中设置一个questionId和questionText,如下所示-
public class QuizQuestion {
private int questionId;
private String questionText;
public ChatMessage(int questionId, String questionText, ) {
this.messageText = messageText;
this.messageUser = messageUser;
}
public QuizQuestion(){
}
public int getQuestionId() {
return questionId;
}
public void setQuestionId(int questionId) {
this.questionId = questionId;
}
public String getQuestionText() {
return questionText;
}
public void setQuestionText(String questionText) {
this.questionText = questionText;
}
}
然后,在MainActivity.java中调用它-
public class MainActivity extends AppCompatActivity {
private TextView questionView;
private Button nextButton;
private int questionCount = 0;
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
questionView = findViewById(R.id.question_view);
nextButton = findViewById(R.id.next_button);
displayQuestion();
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
displayQuestion();
}
});
}
public void displayQuestion() {
// This methods queries your database for a question with the Id of an random integer from 1 to 30 and sets the text of the TextView to the question text
final Query questionToDisplay = FirebaseDatabase.getInstance()
.getReference().child("questions")
.orderByChild("questionId")
.equalTo(new Random().nextInt(30)); // Generate a random integer from 1 to 30
questionToDisplay.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot question : dataSnapshot.getChildren()) {
if (questionCount is < 10) {
questionView.setText(question.getValue(QuizQuestion.class).getQuestionText);
questionCount += 1;
} else if (questionCount >= 10) {
finish(); // Close Activity
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.e("ItemDetail", "onCancelled", databaseError.toException());
}
});
}
如果您要添加问题,只需在需要的地方添加这些行-
FirebaseDatabase.getInstance().getReference().child("questions").push
.setvalue(new QuizQuestion(1, /* Question Id */"What sound does a fox make?" /* Question Text */));
希望这会有所帮助!
编辑:
这是假定的数据库结构-
--quiz-app // Root node
--questions
--Lxjcksduso12m42i4m
--questionId: "1"
--questionText: "What sound does a fox make?"
--Lxjcksduso12m42i4m
--questionId: "2"
--questionText: "What is the capital of Italy?"
--Lxjcksduso12m42i4m
--questionId: "3"
--questionText: "When will the polar ice caps melt completely?"