Это действительно необходимо .addOnCompleteListener, когда вы используете .setPersistenceEnabled (true) на Firebase? - PullRequest
0 голосов
/ 12 марта 2019

спасибо за любопытство!

Я сомневаюсь, действительно ли необходимо звонить addOnCompleteListener, когда я использую setPersistence(true).

Когда я использую addOnCompleteListener, если мой интернет отключен, экран продолжает загружаться, потому что addOnCompleteListener никогда не закончится - в ожидании соединения.Таким образом, я не могу ничего добавить в автономном режиме, потому что экран загрузки ожидает подключения (нарушая концепцию постоянства).

Пример ниже показывает, о чем я говорю:

getDatabaseReference()
        .child("Example")
        .child(userID)
        .push()
        .setValue(dataExample)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()){
            //interface call with success response
            interface.onSuccess();
        }else {
            //interface call with failure response
            interface.onFailure(task.getException().getMessage());
        }
    }
});

Итак, как я уже сказал, если мой интернет отключен, я не могу завершить действие, экран загрузки продолжает загружатьсянавсегда (ожидание завершителя).

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

В приведенном ниже примере показано, что я предлагаю:

 getDatabaseReference()
        .child("Example")
        .child(userID)
        .push()
        .setValue(dataExample);

 //interface call with successful response without handling error (because it won't happen)
 interface.onSuccess();

Итак, мой вопрос: правильно ли это делать?Это хорошая практика?Без addOnCompleteListener и возможность использовать мое приложение в автономном режиме, отправляя обновления только при наличии возможности?

1 Ответ

0 голосов
/ 12 марта 2019

То, что вы видите, - это ожидаемое поведение.Запись в RealtimeDatabase не считается «завершенной», пока она не достигнет сервера и не станет видимой для других клиентов.Локально кэшированная запись не считается завершенной, пока SDK не удастся синхронизировать ее.Если вам не нужно знать, когда запись окончательно получена сервером, или если она прошла успешно, нет необходимости регистрировать слушателя с помощью генерируемой им задачи.

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