java - 如何打破Firebase实时无限循环

标签 java android firebase-realtime-database

我编写了一个用于验证目的的代码。我通过变量创建了从数据中获取内容的变量,它们工作得很好,但是当我将存储的数据与用户想要存储的数据进行比较时,检查然后保留存储数据,直到我强行关闭应用程序。下面是代码

 private void checkThedatafirest() {
        AppointmentREf.child("Appointments").child(userId).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                    StartBusinse= mDisplayDate.getText().toString();
                    sAppoint = sTimeApp.getText().toString();
                    eAppoint = eTimeApp.getText().toString();

                    for (DataSnapshot snapshot: dataSnapshot.getChildren()){
                        String  StartTime = snapshot.child("startFirstAppoint").getValue().toString();
                       String  EndTime = snapshot.child("endSecondAppointment").getValue().toString();
                        String  Date = snapshot.child("startBusinse").getValue().toString();
                        if (!StartBusinse.equals(Date)&& !sAppoint.equals(StartTime)&&!eAppoint.equals(EndTime)){
                              sendDataTofireStore();

                            break;
                        }else {
                            Toast.makeText(AppointmentInfo.this, "The data already exist , please change ",Toast.LENGTH_SHORT).show();

                        }
                        break;
                    }
                }else {
                    sendDataTofireStore();
                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

最佳答案

很难从您共享的代码中确定,但通常这种行为是由更新您监听的数据引起的。如果是这样的话,流程如下:

  1. 您将监听器附加到某些数据
  2. Firebase 读取该数据并调用您的 onDataChange
  3. 您对数据进行更改,并将其写入数据库
  4. Firebase 检测到该更改,并调用 onDataChange
  5. 返回#3

解决方案是要么不写入您读取的数据,要么确保数据只监听一次。正确的解决方案取决于用例,但场景 2 最简单的情况肯定是使用 addListenerForSingleValueEvent:

AppointmentREf.child("Appointments").child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
  ...

关于java - 如何打破Firebase实时无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52466657/

相关文章:

java - 我应该如何在 Java 中表示依赖关系图?

java - 64 位 JVM 限制为 300GB 内存?

java - gradle 和 Android Studio 中调试和发布的不同依赖项

Android:在 MaterialTheme 中使用自定义样式的 AlertDialog 抛出资源未找到异常

node.js - 如何处理 firebase 事务 api 上的空值

java - 以编程方式将 Artifact 部署到 Nexus 的快速方法(在 Java 中)

java - JBox2d - world.getBodyList() 进入无限循环

android - 抑制字段注释

java - 如何检查远程 Android 设备的互联网连接情况?

android - 在时间戳 Firebase 上建立索引