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

Android Studio中Firestore如何在课程集合内嵌套添加学生、教师子集合

解决方案

核心问题说明

  • 你的代码中多次链式调用.document()方法,每次调用都会生成一个带随机ID的全新文档引用,导致子集合无法挂靠到同一个课程父文档下
  • 现有代码存在笔误:你定义的课程名称变量是txt_lesson,空值判断时误用了不存在的txt_ders变量,会直接导致运行报错

实现逻辑

你需要先完成课程主文档的写入,拿到该文档的固定引用后,再基于这个引用创建下属的两个子集合即可。Firestore 不支持创建空集合,如果仅需要占位子集合结构,写入一个占位文档即可,修正后代码如下:

private void Ders_EKLE(){
    binding.btnEkleDers.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            txt_lesson = binding.isimDers.getText().toString();
            // 空值校验,修正原笔误txt_ders为txt_lesson
            if(txt_lesson.equals("")){
                AlertDialog.Builder builder = new AlertDialog.Builder(DersEkleActivity.this);
                builder.setTitle("警告");
                builder.setMessage("课程名称不能为空");
                builder.setIcon(R.drawable.warningicon);
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                    }
                });
                builder.show();
            } else {
                linkedHashMap.put("lesson"+i,txt_lesson); 
                // 构造课程基础数据
                Map<String, Object> lessonData = new HashMap<>();
                lessonData.put("lessonName", txt_lesson);
                // 1. 先写入课程主文档,拿到该文档的固定引用
                Courses.document("KDXnJKKno1D2xtG9G6UE").collection("Lessons")
                        .add(lessonData)
                        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                            @Override
                            public void onSuccess(@NonNull DocumentReference lessonDocRef) {
                                // 2. 基于同一个课程文档引用,分别创建下属Student、Teacher子集合
                                lessonDocRef.collection("Student")
                                        .add(new DersEklePerson())
                                        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                                            @Override
                                            public void onSuccess(@NonNull DocumentReference documentReference) {
                                                // Student子集合写入成功后写入Teacher子集合
                                                lessonDocRef.collection("Teacher")
                                                        .add(new DersEklePerson()) // 替换为教师类对应的实例对象即可
                                                        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                                                            @Override
                                                            public void onSuccess(@NonNull DocumentReference documentReference) {
                                                                Toast.makeText(DersEkleActivity.this,"课程添加成功",Toast.LENGTH_LONG).show();
                                                            }
                                                        });
                                            }
                                        })
                                        .addOnFailureListener(new OnFailureListener() {
                                            @Override
                                            public void onFailure(@NonNull Exception e) {
                                                Toast.makeText(DersEkleActivity.this,"学生集合添加失败:" + e.getMessage(),Toast.LENGTH_LONG).show();
                                            }
                                        });
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(DersEkleActivity.this,"课程主文档添加失败:" + e.getMessage(),Toast.LENGTH_LONG).show();
                            }
                        });
            }
        }
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:04