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

按钮点击监听中ArrayList.clear()导致Firestore数据无法写入的问题排查

问题原因与解决方法

核心原因

不是ArrayList.clear()导致无法添加元素,而是Firestore的get()方法是异步执行的。你当前的代码逻辑是:点击按钮→清空集合→发起Firestore异步请求→立刻获取集合大小并弹出Toast。但此时异步请求还没完成,onSuccess回调里的元素添加操作根本没执行,所以你看到的集合大小始终是0。

解决方法

把获取集合大小、弹出Toast的逻辑,移到onSuccess回调内部,确保只有在数据加载完成后才执行这些操作。

修改后的点击事件代码:

Btn121.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        coursesArrayList21.clear();

        db2.collection("Courses").get()
                .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                    @Override
                    public void onSuccess(QuerySnapshot queryDocumentSnapshots){
                        if (!queryDocumentSnapshots.isEmpty()) {
                            List<DocumentSnapshot> list = queryDocumentSnapshots.getDocuments();
                            for (DocumentSnapshot d : list) {
                                Courses c = d.toObject(Courses.class);
                                coursesArrayList21.add(c);
                            }
                            // 数据加载完成后再获取集合大小并提示
                            dummy1234 = coursesArrayList21.size();
                            Toast.makeText(MainActivity2.this, Integer.toString(dummy1234), Toast.LENGTH_SHORT).show();
                            // 如果该集合是RecyclerView的数据源,记得在此更新适配器
                            // adapter.notifyDataSetChanged();
                        } else {
                            Toast.makeText(MainActivity2.this, "No data found in Database", Toast.LENGTH_SHORT).show();
                            // 空数据时集合大小为0,可在此明确提示
                            dummy1234 = 0;
                            Toast.makeText(MainActivity2.this, Integer.toString(dummy1234), Toast.LENGTH_SHORT).show();
                        }
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(MainActivity2.this, "Fail to get the data.", Toast.LENGTH_SHORT).show();
                    }
                });
    }
});

额外注意事项

  • 确保coursesArrayList21是全局初始化的实例(比如在Activity的onCreate方法中执行coursesArrayList21 = new ArrayList<>()),避免出现空指针异常。
  • 如果后续要将这个集合用于UI展示(比如RecyclerView),必须在数据添加完成后调用适配器的notifyDataSetChanged()方法,触发UI更新。

内容的提问来源于stack exchange,提问作者goksel demiradam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:00:31