【问题标题】:Firebase Realtime Database Data Automatically Gets DeletedFirebase 实时数据库数据自动被删除
【发布时间】:2021-05-08 11:51:31
【问题描述】:

我所指问题的图片 发给:

我正在尝试创建一个教育应用程序,用户可以在其中创建教室,并可以为学生提供作业、家庭作业和视频讲座等工作。我使用 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:我添加了我遇到的问题的图片。

【问题讨论】:

  • 我认为所有子节点都不存在。你能确保你所有的 child 都存在于 firebase 中吗?
  • 您是指特定教室的所有子节点还是“教室”节点?节点“教室”一开始并不存在,但它是在所有数据被自动删除后创建的。我正在用屏幕截图编辑我的问题,显示我的问题。
  • 不知道是什么问题。但是你可以试试 Database DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Classrooms").child(classroom.getId()); 然后 setValue on ref。也可用于updateUserinDb
  • 感谢您的帮助,但没有成功。数据仍然被删除。我不知道为什么会这样。我以前有相同的代码,但现在只有它解决了这个问题。
  • 一切看起来都很好。不知道问题所在。顺便说一句,如果您找到任何解决方案,请告诉我们。

标签: android firebase firebase-realtime-database


【解决方案1】:

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

 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());

希望这能帮助您解决问题。

编码愉快...

【讨论】:

  • 我之前已经有过这段代码,但是这不起作用。请提供替代解决方案。谢谢你的建议!
猜你喜欢
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
相关资源
最近更新 更多