Firestore продолжает срабатывать, когда FirebaseDatabase.getInstance (). GoOnline (); называется - PullRequest
0 голосов
/ 04 августа 2020

Я использую в своем приложении как FireStore, так и базу данных Realtime.

Firestore - это основная база данных, а база данных Firebase Realtime используется для ее системы присутствия (geofire).

У меня есть переключатель Когда кнопка включена, запускается FirebaseDatabase.getInstance (). goOnline (). Тоже меняет !!!! FIRESTORE !!!! (firestore и firebase real time Database - две разные вещи, поэтому перестань пытаться изменить мой вопрос, чувак, извини, другие, этот чувак пытается изменить слово firestore на базу данных в реальном времени) значение «истина». Однако каждый раз, когда я go онлайн меняет !!!! FIRESTORE !!!! значение "истина", но каким-то образом сразу же возвращается к "ложь". Я не могу найти причину, по которой он это делает. Пожалуйста помоги. Вот что я делаю.

enableButton.setOnStateChangeListener(new OnStateChangeListener() {
        @Override
        public void onStateChange(boolean active) {

            if (active) {

                FirebaseDatabase.getInstance().goOnline();

                DatabaseReference updateOnlineStatus = FirebaseDatabase.getInstance()
                        .getReference()
                        .child(Common.user_tbl)
                        .child(auth);
                updateOnlineStatus.child("isUserOnline").setValue("true");

                FirebaseFirestore.getInstance().collection("Users")
                        .document(auth).update("active", "true");


            }

            else {

                FirebaseDatabase.getInstance().goOffline();

            }

        }
    });

Приведенный выше код позволяет пользователю перейти в Интернет при изменении значения как в базе данных Firebase, так и в Firestore.

После того, как пользователь перейдет в FirebaseDatabase.getInstance (). GoOffline () ; ..... disconnectUser (); вызывается метод, который активируется в onCreate.

private void disconnectUser(){

    loadUsers = FirebaseDatabase.getInstance().getReference(Common.user_tbl);

    loadUsers.child(auth).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshotUser) {

            User user = dataSnapshotUser.getValue(User.class);

            if (user!=null) {

                loadUsers.child(auth).child("isUserOnline").onDisconnect().setValue("false").addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {

                        FirebaseFirestore.getInstance().collection("Users")
                                .document(auth).update("active", "false");

                    }
                });

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

}

Я попытался изменить его с addValueEventListener на addListenerForSingleValueEvent, но это ничего не меняет. Мне нужен этот метод disconnectUser, чтобы значение изменялось, когда пользователь выходит из приложения, проводя пальцем или переходя в автономный режим с помощью кнопки переключения. Я не понимаю, почему значение Firestore меняется на "true" при подключении к сети, но сразу же возвращается к "false". Пожалуйста, помогите

Заранее спасибо.

...