首页 > 解决方案 > Firebase 实时数据库数据自动被删除

问题描述

我所指的问题的图像:

我正在尝试创建一个教育应用程序,用户可以在其中创建教室,并可以为学生分配作业、家庭作业和视频讲座等工作。我使用 Firebase 实时数据库作为 BAAS。到目前为止一切正常,当我创建一个教室,即在“教室”节点下的节点上设置一个值时,整个数据库中的数据被删除,然后在主数据库下创建一个名为“教室”的新节点,然后Classroom 对象的值在那里设置。自 3 天以来,我一直在对此进行故障排除,在堆栈溢出方面看到了类似的问题,但大多数问题都没有答案,我尝试了那些有答案的问题的答案,但它们没有用。请帮助我,由于这个问题,我被卡住了,无法发布我的应用程序供公众使用。

为了帮助调试,这是我正在使用的一些代码:

createClassroom.setOnClickListener(v -> {
        String proposedName = className.getText().toString();
        if (proposedName.equals("")) {
                //some checks for ensuring proposed name is a valid classroom name
        } else {

            // Some code which sets the values of Classroom Object (setters)

            FirebaseDatabase.getInstance()
                    .getReference()
                    .child("Classrooms")
                    .child(classroom.getId())
                    .setValue(classroom.toMap())
                    .addOnSuccessListener(aVoid -> {
                        updateUserInDb())
                    .addOnFailureListener(e -> Toast.makeText(context, "Failed Due To " + e.getMessage(), Toast.LENGTH_LONG).show());
        }
    });
}

我也尝试过使用 FirebaseDatabase.getInstance().getReference("Classrooms")... 方法,但它没有改变任何东西。

此外,这里是 updateUserInDb() 方法:

 private void updateUserInDb() {
    String user_id = DataFlowGlobals.user.getId();

    FirebaseDatabase.getInstance()
            .getReference()
            .child("Users")
            .child(user_id)
            .child("cre")
            .child(classroom.getId())
            .setValue(classroom.getId())
            .addOnSuccessListener(aVoid -> Toast.makeText(context, "Classroom Created Successfully........", Toast.LENGTH_SHORT).show())
            .addOnFailureListener(e -> Toast.makeText(context, "Failed due to " + e.getMessage(), Toast.LENGTH_SHORT).show());

    finish();
  }

请尽快提供帮助,提前感谢您的帮助!

编辑 1:我添加了我遇到的问题的图像。

标签: androidfirebasefirebase-realtime-database

解决方案


是的。您必须先获取数据库的引用,然后才能在子节点上执行任何选项。像打击

 FirebaseDatabase.getInstance()
                .getReference("Classrooms")
                .child(classroom.getId())
                .setValue(classroom.toMap())
                .addOnSuccessListener(aVoid -> {
                    updateUserInDb())
                .addOnFailureListener(e -> Toast.makeText(context, "Failed Due To " + e.getMessage(), Toast.LENGTH_LONG).show());

我希望这将帮助您解决您的问题。

快乐的编码...


推荐阅读