Остановите метод от повторения, когда активность закрыта - PullRequest
0 голосов
/ 06 ноября 2018
    final DatabaseReference db = FirebaseDatabase.getInstance().getReference();
    Query mSeenRef = db.child("Messages").child(MessageSenderId).child(MessageRecieverId).orderByChild("From").equalTo(MessageRecieverId);
    mSeenRef.addValueEventListener(new ValueEventListener(){
        @Override
        public void onDataChange(DataSnapshot dataSnapshot){
            if(dataSnapshot.exists()) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    String keyId = ds.getKey();
                    DatabaseReference mSendersRef = db.child("Messages").child(MessageSenderId).child(MessageRecieverId).child(keyId);
                    DatabaseReference mRecieversRef = db.child("Messages").child(MessageRecieverId).child(MessageSenderId).child(keyId);
                    Map<String, Object> childUpdates = new HashMap<>();
                    childUpdates.put("Seen", true);
                    mSendersRef.updateChildren(childUpdates);
                    mRecieversRef.updateChildren(childUpdates);

                }
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

Этот код просто устанавливает SEEN=true в базовом приложении чата, и он отлично работает, когда вы открываете действие.

Если пользователь A открывает чат-активность, B получает уведомление о том, что сообщения видны, и когда пользователь A находится в чате, B по-прежнему непрерывно получает уведомление о том, что A видит сообщения Bs, но как только A выходит из чата, отправленные сообщения B по-прежнему называются как видно по А, хотя А не находится внутри активности.

Только когда A закрывает приложение (даже из фона), B прекращает отправлять свои сообщения A, как видит А.

Я уверен, что проблема в этом методе, поэтому я просто хочу знать, как заставить этот метод перестать выполняться после закрытия действия. Этот метод находится в onCreate ChatActivity.

1 Ответ

0 голосов
/ 06 ноября 2018

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

Из документов

Считывание данных один раз

В некоторых случаях вы можете захотеть вызвать обратный вызов один раз, а затем немедленно удаляется, например, при инициализации элемента пользовательского интерфейса, который вы не ожидайте перемен. Вы можете использовать addListenerForSingleValueEvent () метод, чтобы упростить этот сценарий: это срабатывает один раз, а затем не запускается снова.

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