Я использую в своем приложении как 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". Пожалуйста, помогите
Заранее спасибо.