将firebase中的对象添加到列表中的java问题
测试性。java
public class TestActivity extends AppCompatActivity {
private DatabaseReference fireBaseRef = ConfigurationFirebase.getFirebaseDatabase();
private Button buttonTest;
private Question question;
List<Question> questionsList = new ArrayList();
private String name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simulado);
generateQuestions();
buttonTest= findViewById(R.id.buttonTest);
buttonTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TestActivity.this, listaQuestion.get(0).getQuestion().toString(), Toast.LENGTH_LONG).show();
}
});
}
public List<Question> generateQuestions() {
DatabaseReference questionRef = fireBaseRef.child("questions");
questionRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
question = dataSnapshot.child("id").child("1").getValue(Question.class);
name = question.getQuestion().toString();
Question objectQuestion = new Question();
objectQuestion.setQuestion(name);
objectQuestion.setOptionA(question.getOptionA());
objectQuestion.setOptionB(question.getOptionB());
objectQuestion.setOptionC(question.getOptionC());
objectQuestion.setOptionD(question.getOptionD());
objectQuestion.setResult(question.getResult());
questionsList.add(objectQuestion);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return questionsList;
}
}
当我试图使用列表显示一个toast,但使用它所显示的变量名时,我不断收到错误java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
。课堂上的问题只有getter和setter
# 1 楼答案
获取0是因为在获取数据之前返回列表,请确保firebase运行此异步,并且它在onDataChange()中获得一些时间来获取数据以返回数据。请阅读我昨天发布的答案How do I pass data out of the onDataChange method?是同一个问题
另外,请检查弗兰克·范·帕夫伦的回答getContactsFromFirebase() method return an empty list