как прервать бесконечный цикл в режиме реального времени - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть код, который запускается для проверки.Я создал переменные, которые получают содержимое из данных, они работали довольно хорошо, но когда я сравниваю сохраненные данные с данными, которые пользователь хочет сохранить, проверяю их и сохраняю данные до тех пор, пока я не закрою приложение принудительно.ниже код

 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 голосов
/ 23 сентября 2018

Трудно быть уверенным в коде, которым вы поделились, но обычно такого рода поведение вызвано обновлением данных, которые вы слушаете.В этом случае процесс выглядит следующим образом:

  1. Вы присоединяете слушателя к некоторым данным
  2. Firebase читает эти данные и вызывает ваш onDataChange
  3. Вы вносите изменения в данные и записываете их в базу данных
  4. Firebase обнаруживает это изменение и вызывает ваш onDataChange
  5. Вернуться к # 3

Решение состоит в том, чтобы либо не записывать прочитанные вами данные, либо обеспечить прослушивание данных только один раз.Правильное решение зависит от варианта использования, но простейший вариант для сценария 2, безусловно, должен использовать addListenerForSingleValueEvent:

AppointmentREf.child("Appointments").child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...