Android: Как добавить значения в базу данных Firebase, не вызывая слушателей? - PullRequest
0 голосов
/ 29 августа 2018

Я использую setValue() для обновления значения в моей базе данных Firebase всякий раз, когда изменяется его статус. Но обновление этого значения на постоянной основе вызывает eventListeners, которые не нужны.

Есть ли способ обновить значение в базе данных Firebase, не вызывая другие EventListener, которые не предназначены для запуска?

Вот код для установки значения:

stamp = isOnline();

        final DatabaseReference rRef = FirebaseDatabase.getInstance().getReference();
        final DatabaseReference uref = rRef.child("users");
        final DatabaseReference sRef = uref.child(mAuth.getUid());

        sRef.child("online_status").setValue(stamp);

Слушатель, который запускается (что я не хочу):

uRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                ms = dataSnapshot.child("rec_msg").getValue(String.class);
                fUid = dataSnapshot.child("fromUID").getValue(String.class);
                st = dataSnapshot.child("rec_secret").getValue(String.class);
                boolean tell = dataSnapshot.child("online_status").getValue(Boolean.class);
                if(tell)
                    setTitle(hName + " (online)");
                int km = 0;
                try {
                    km = Integer.parseInt(st);
                }
                catch (NumberFormatException e) {
                    Log.d("NumberError:", "Can't convert");
                }

                if(ms!=null && !ms.equals(""))
                    addMessageBox(ms,km);
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                ms = dataSnapshot.child("rec_msg").getValue(String.class);
                fUid = dataSnapshot.child("fromUID").getValue(String.class);
                st = dataSnapshot.child("rec_secret").getValue(String.class);

                boolean tell = dataSnapshot.child("online_status").getValue(Boolean.class);
                if(tell)
                    setTitle(hName + " (online)");

                int km = 0;
                try {
                    km = Integer.parseInt(st);
                }
                catch (NumberFormatException e) {
                    Log.d("NumberError:", "Can't convert");
                }


                if(ms!=null && !ms.equals(""))
                    addMessageBox(ms,km);

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
                Toast.makeText(Main5Activity.this,"User left the conversation", Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

1 Ответ

0 голосов
/ 29 августа 2018

Чтобы установить / обновить значение свойства в базе данных реального времени Firebase, нет необходимости использовать прослушиватель. Слушатели используются для чтения данных и , а не для записи или обновления данных. Вы можете просто использовать метод setValue() или updateChildren() непосредственно для ссылки следующим образом:

yourRef.setValue(yourObject);

Подробнее здесь .

Установите данные в этом месте на заданное значение.

или

yourRed.updateChildren(yourMap);

Подробнее здесь .

Обновите определенные дочерние ключи до указанных значений.

Edit:

Как добавить значения в базу данных Firebase без запуска прослушивателей?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...