i am trying to fetch data from 5 different childs randomly to arrayList. My firebase database looks like this:
"Quiz": {
"Level_1": {
"Theme_1": [
null,
{
"answerText": "1",
"imgToken": "img1-1",
"option1Text": "Warshaw",
"option2Text": "Brelin",
"option3Text": "Paris",
"option4Text": "Prague",
"questionID": 1,
"questionText": "What is the capital of Poland ?"
},
{
"answerText": "3",
"imgToken": "img1-2",
"option1Text": "Oslo",
"option2Text": "Helsinky",
"option3Text": "Budapest",
"option4Text": "Wiena",
"questionID": 2,
"questionText": "What is the capital of Hungary ?"
},
...continues to question n.10
I have there 5 Levels with 5 themes in them and each theme contains 10 questions. Is there any way how to get randomly 1 question from each 5 themes from 1 level to ArrayList in Android Studio using Java ?
I tried to get all 10 questions from theme 1 to ArrayList, then do Collections.shuffle and add question from 0th position to new ArrayList which i am using in the quiz but it is too complicated and if there would be more than 5 level, or more than 5 themes it will crash or will not work.
Also this code looks terrible and i think could be written better.
databaseReference.child("Quiz").child("Level_1").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot questions : snapshot.child("Theme_1").getChildren()){
String getQuestion = questions.child("questionText").getValue(String.class);
String getOption1 = questions.child("option1Text").getValue(String.class);
String getOption2 = questions.child("option2Text").getValue(String.class);
String getOption3 = questions.child("option3Text").getValue(String.class);
String getOption4 = questions.child("option4Text").getValue(String.class);
String getAnswer = questions.child("answerText").getValue(String.class);
String imgToken = questions.child("imgToken").getValue(String.class);
QuestionsList questionslist = new QuestionsList(getQuestion, getOption1, getOption2, getOption3, getOption4, getAnswer, imgToken);
theme1List.add(questionslist);
Collections.shuffle(theme1List);
}
for (DataSnapshot questions : snapshot.child("Theme_2").getChildren()){
String getQuestion = questions.child("questionText").getValue(String.class);
String getOption1 = questions.child("option1Text").getValue(String.class);
String getOption2 = questions.child("option2Text").getValue(String.class);
String getOption3 = questions.child("option3Text").getValue(String.class);
String getOption4 = questions.child("option4Text").getValue(String.class);
String getAnswer = questions.child("answerText").getValue(String.class);
String imgToken = questions.child("imgToken").getValue(String.class);
QuestionsList questionslist = new QuestionsList(getQuestion, getOption1, getOption2, getOption3, getOption4, getAnswer, imgToken);
theme2List.add(questionslist);
Collections.shuffle(theme2List);
}
for (DataSnapshot questions : snapshot.child("Theme_3").getChildren()){
String getQuestion = questions.child("questionText").getValue(String.class);
String getOption1 = questions.child("option1Text").getValue(String.class);
String getOption2 = questions.child("option2Text").getValue(String.class);
String getOption3 = questions.child("option3Text").getValue(String.class);
String getOption4 = questions.child("option4Text").getValue(String.class);
String getAnswer = questions.child("answerText").getValue(String.class);
String imgToken = questions.child("imgToken").getValue(String.class);
QuestionsList questionslist = new QuestionsList(getQuestion, getOption1, getOption2, getOption3, getOption4, getAnswer, imgToken);
theme3List.add(questionslist);
Collections.shuffle(theme3List);
}
for (DataSnapshot questions : snapshot.child("Theme_4").getChildren()){
String getQuestion = questions.child("questionText").getValue(String.class);
String getOption1 = questions.child("option1Text").getValue(String.class);
String getOption2 = questions.child("option2Text").getValue(String.class);
String getOption3 = questions.child("option3Text").getValue(String.class);
String getOption4 = questions.child("option4Text").getValue(String.class);
String getAnswer = questions.child("answerText").getValue(String.class);
String imgToken = questions.child("imgToken").getValue(String.class);
QuestionsList questionslist = new QuestionsList(getQuestion, getOption1, getOption2, getOption3, getOption4, getAnswer, imgToken);
theme4List.add(questionslist);
Collections.shuffle(theme4List);
}
for (DataSnapshot questions : snapshot.child("Theme_5").getChildren()){
String getQuestion = questions.child("questionText").getValue(String.class);
String getOption1 = questions.child("option1Text").getValue(String.class);
String getOption2 = questions.child("option2Text").getValue(String.class);
String getOption3 = questions.child("option3Text").getValue(String.class);
String getOption4 = questions.child("option4Text").getValue(String.class);
String getAnswer = questions.child("answerText").getValue(String.class);
String imgToken = questions.child("imgToken").getValue(String.class);
QuestionsList questionslist = new QuestionsList(getQuestion, getOption1, getOption2, getOption3, getOption4, getAnswer, imgToken);
theme5List.add(questionslist);
Collections.shuffle(theme5List);
}
questionslists.add(0,theme1List.get(0));
questionslists.add(1,theme2List.get(0));
questionslists.add(2,theme3List.get(0));
questionslists.add(3,theme4List.get(0));
questionslists.add(4,theme5List.get(0));
Collections.shuffle(questionslists);
totalQuestionTV.setText("/"+questionslists.size());
total = questionslists.size();
startQuizTimer();
selectQuestion(currentQuestionPosition);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();
}
});