You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Firebase答题应用:Activity创建时ArrayList长度为0

问题分析与解决建议

问题根源

Firebase的addListenerForSingleValueEvent是异步执行的,你在onCreate里直接调用loadnewquestion()时,Firebase还没完成数据拉取,questionlists自然是空的。而重启测验时,之前的异步请求已经把数据加载到questionlists里了,所以能正常显示题目。

解决步骤

  1. 延迟初始化题目:把loadnewquestion()移到onDataChange方法内部,确保数据加载完成后再渲染题目。
  2. 添加加载失败处理:在onCancelled里提示用户加载出错,避免用户一直等待加载弹窗。
  3. 空列表防护:在loadnewquestion里先判断列表是否为空,避免数组越界崩溃。

修改后的关键代码

DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference();
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        for(DataSnapshot dataSnapshot : snapshot.child("Python").getChildren()){
            String questions=dataSnapshot.child("question").getValue(String.class);
            String getansa = dataSnapshot.child("option1").getValue(String.class);
            String getansb = dataSnapshot.child("option2").getValue(String.class);
            String getansc = dataSnapshot.child("option3").getValue(String.class);
            String getansd = dataSnapshot.child("option4").getValue(String.class);
            String getans = dataSnapshot.child("answer").getValue(String.class);

            Questionlist questionlist = new Questionlist(questions,getansa,getansb,getansc,getansd,getans);
            questionlists.add(questionlist);
        }

        progressDialog.hide();
        // 数据加载完成后再初始化题目
        loadnewquestion();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        progressDialog.hide();
        // 提示加载失败
        Toast.makeText(Python.this, "题目加载失败,请检查网络", Toast.LENGTH_SHORT).show();
    }
});

// 移除原来onCreate里的loadnewquestion()调用

修改loadnewquestion方法,增加空列表判断:

private void loadnewquestion() {
    tq=questionlists.size();
    totalquestions.setText("Total Questions: "+tq);

    // 列表为空时直接返回,避免崩溃
    if(tq == 0){
        Toast.makeText(this, "暂无题目数据", Toast.LENGTH_SHORT).show();
        return;
    }

    if(currentquestionindex == tq){
        finishquiz();
        return;
    }

    question.setText(questionlists.get(currentquestionindex).getQuestion());
    ansa.setText(questionlists.get(currentquestionindex).getOption1());
    ansb.setText(questionlists.get(currentquestionindex).getOption2());
    ansc.setText(questionlists.get(currentquestionindex).getOption3());
    ansd.setText(questionlists.get(currentquestionindex).getOption4());
}

数据库结构截图

Firebase数据库Python节点结构

内容的提问来源于stack exchange,提问作者settipalli sudheendra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:33:06