如何打破火基实时的无限循环

时间:2018-09-23 13:38:24

标签: 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 个答案:

答案 0 :(得分:1)

很难从您共享的代码中确定,但是通常这种行为是由于更新您侦听的数据引起的。在这种情况下,流程如下:

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

解决方案是要么不写所读取的数据,要么确保仅侦听一次数据。正确的解决方案取决于用例,但是方案2最简单的情况肯定是使用addListenerForSingleValueEvent

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