Информация/подключение возвращает ложь, даже если устройство подключено к Интернету

Как следует из названия, я использую infor/connection для проверки соединения от клиента к базе данных, но если я удалю и переустановлю приложение, infor/connection вернет true и вернет false после этого, даже если устройство может получить доступ к Интернету, я проверил на реальном и виртуальном устройство, и эта проблема все еще остается.

это код для проверки соединения:



 mValueEventConnection = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                boolean isConnected = dataSnapshot.getValue(Boolean.class);

                updateConnectionStatus(isConnected);

                Log.d("SSSSS-CONNECTION", isConnected + "");

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d("SSSSS-CONNECTION", databaseError + "");
            }
        };

        CONNECT_REF.addValueEventListener(mValueEventConnection);

и результат:

 D/SSSSS-CONNECTION: true
 D/SSSSS-CONNECTION: false

ОБНОВИТЬ:

После переустановки и открытия приложения в первый раз проблема возникнет, а во второй раз - нет.

Псевдоузел .info/connection указывает, есть ли у клиента подключение к серверу базы данных Firebase, а это больше, чем просто подключение к Интернету. Обратите внимание, что клиент Firebase автоматически подключается через минуту, если нет активного прослушивателя данных и нет записей.

Frank van Puffelen 12.07.2019 05:30

Итак, быстрый вопрос. Как я могу заставить его вернуть true в этом случае. я должен читать или писать что-то в базу данных?

Trung Trần 12.07.2019 05:46

Ой, я хотел сказать "отключает" там, но я думаю, вы меня правильно поняли. Чтобы соединение оставалось открытым, убедитесь, что есть активный прослушиватель. Так что прикрепите слушателя к какой-то регулярной части ваших данных. Даже не имеет значения, существуют ли данные, так что FirebaseDatabase.getInstance().getReference("ThisDoesNotExis‌​t").addValueEventLis‌​tener(...).

Frank van Puffelen 12.07.2019 16:16

спасибо, Фрэнк, я использую keepsynced, чтобы сохранить пустой прослушиватель в базе данных, и теперь все в порядке

Trung Trần 13.07.2019 17:14

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

Frank van Puffelen 13.07.2019 18:18
0
5
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Псевдоузел .info/connection указывает, есть ли у клиента подключение к серверу базы данных Firebase, а это больше, чем просто подключение к Интернету.

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

В этом последнем случае вы можете прикрепить прослушиватель к какой-либо обычной части ваших данных или к несуществующему узлу: FirebaseDatabase.getInstance().getReference("ThisDoesNotExist").addValueEventListener(...).

Другие вопросы по теме