【发布时间】:2021-01-16 21:19:27
【问题描述】:
我的目标是不使用 Firebase,而是使用本地 json 文件并从中获取数据,就像我使用 Firebase 的 DataSnapshot 函数:getChildren() 和 getValue() 一样。 p>
我一直在关注关于如何在 Android 上创建测验应用程序的 youtube 教程,这是我在 Firebase 上使用的 json:
{
"Chapters" : {
"chapter101" : {
"name" : "Quiz Chapter 1",
"sets" : 2
},
"chapter102" : {
"name" : "Quiz Chapter 2",
"sets" : 1
},
},
"SETS" : {
"chapter101" : {
"questions" : {
"question1" : {
"correctAnswer" : "A",
"optionA" : "A",
"optionB" : "B",
"optionC" : "C",
"optionD" : "D",
"question" : "Lorem ipsum...? (Question 1 from set number 1)",
"setNo" : 1
},
"question2" : {
"correctAnswer" : "B",
"optionA" : "A",
"optionB" : "B",
"optionC" : "C",
"optionD" : "D",
"question" : "Lorem ipsum...? (Question 2 from set number 1)",
"setNo" : 1
},
"question3" : {
"correctAnswer" : "A",
"optionA" : "A",
"optionB" : "B",
"optionC" : "C",
"optionD" : "D",
"question" : "Lorem ipsum...? (Question 1 from set number 2)",
"setNo" : 2
},
"question4" : {
"correctAnswer" : "B",
"optionA" : "A",
"optionB" : "B",
"optionC" : "C",
"optionD" : "D",
"question" : "Lorem ipsum...? (Question 2 from set number 2)",
"setNo" : 2
}
}
},
"chapter102" : {
"questions" : {
"question1" : {
"correctAnswer" : "A",
"optionA" : "A",
"optionB" : "B",
"optionC" : "C",
"optionD" : "D",
"question" : "Lorem ipsum...? (Question 1 from set number 1)",
"setNo" : 1
},
"question2" : {
"correctAnswer" : "B",
"optionA" : "A",
"optionB" : "B",
"optionC" : "C",
"optionD" : "D",
"question" : "Lorem ipsum...? (Question 2 from set number 1)",
"setNo" : 1
}
}
}
}
}
这就是我在 Java 代码中使用它的方式:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
private List<QuestionModel> list;
private String chapter;
private int setNo;
chapter = getIntent().getStringExtra("chapter");
setNo = getIntent().getIntExtra("setNo");
list = new ArrayList<>();
myRef.child("SETS").child(chapter).child("questions").orderByChild("setNo").equalTo(setNo).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
list.add(dataSnapshot.getValue(QuestionModel.class));
}
if (list.size() > 0) {
for (int i = 0; i < 4; i++) {
optionsContainer.getChildAt(i).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button correctOption = (Button) optionsContainer.findViewWithTag(list.get(position).getCorrectANS());
if (correctOption != null) {
checkAnswer((Button) v);
}
}
});
}
playAnim(question, 0, list.get(position).getQuestion());
nextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
nextBtn.setEnabled(false);
nextBtn.setAlpha(0.7f);
enableOption(true);
position++;
if (position == list.size()) {
Intent scoreIntent = new Intent(QuestionsActivity.this, ScoreActivity.class);
scoreIntent.putExtra("score", score);
scoreIntent.putExtra("total", list.size());
startActivity(scoreIntent);
finish();
return;
}
count = 0;
playAnim(question, 0, list.get(position).getQuestion());
}
});
} else {
finish();
Toast.makeText(QuestionsActivity.this, "-", Toast.LENGTH_SHORT).show();
}
loadingDialog.dismiss();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(QuestionsActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
loadingDialog.dismiss();
finish();
}
});
QuestionModel.class 包含这些(以及 getter):
public class QuestionModel {
private String question, optionA, optionB, optionC, optionD, correctANS;
private int setNo;
public QuestionModel() {
}
public QuestionModel(String question, String optionA, String optionB, String optionC, String optionD, String correctANS, int setNo) {
this.setNo = setNo;
this.question = question;
this.optionA = optionA;
this.optionB = optionB;
this.optionC = optionC;
this.optionD = optionD;
this.correctANS = correctANS;
}
【问题讨论】:
标签: java android json firebase fetch