在Firebase中将对象添加到列表中的问题

时间:2018-09-17 23:46:37

标签: java android firebase firebase-realtime-database

TestActivity.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;

    }
}

当我尝试使用列表显示吐司但显示变量名称时,我不断收到错误java.lang.IndexOutOfBoundsException: Index: 0, Size: 0。问题类只有吸气剂和吸气剂

1 个答案:

答案 0 :(得分:1)

之所以得到0,是因为在获取数据之前要返回列表,请参见firebase运行此异步操作,并且在onDataChange()中有一些时间来获取数据以返回数据。请阅读我昨天How do I pass data out of the onDataChange method?发布的这个答案。

也请检查Frank Van Puffelen getContactsFromFirebase() method return an empty list的答案