Понимание и оптимизация автономной поддержки с помощью базы данных Firebase Realtime и FirestoreAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Понимание и оптимизация автономной поддержки с помощью базы данных Firebase Realtime и Firestore

Сообщение Anonymous »

Я разрабатываю приложение для Android, которое использует Firebase для управления данными клиентов, уделяя особое внимание автономной поддержке. Изначально я использовал Firestore, но столкнулся с проблемами записи данных в автономном режиме, когда устройство находилось в режиме полета:

(25.0.0) [WriteStream]: ( ed20259) Поток закрыт со статусом: Status{code=UNAVAILABLE,description=Невозможно разрешить хост firestore.googleapis.com, причина=java.lang.RuntimeException: java.net.UnknownHostException: Невозможно разрешить хост "firestore.googleapis.com" : Нет адреса, связанного с именем хоста.

Видео, показывающее ошибку: Видео с ошибкой
Кроме того, произошла значительная задержка при загрузке данных в режиме полета, как показано в этом видео: Загрузка видео с задержкой
Чтобы решить эту проблему, я протестировал тот же проект с использованием базы данных Firebase Realtime. Были добавлены зависимости и внесены изменения в репозиторий. Вот внесенные изменения:
Шаги по изменению:
1. Добавлена ​​зависимость от базы данных реального времени в build.gradle:

Код: Выделить всё

+ implementation("com.google.firebase:firebase-database-ktx")
2- Изменена строка в репозитории com/example/myapplication/model/service/repository/impl:

Код: Выделить всё

- private val database: CustomerService,
+ private val database: CustomerRealtimeService,
3. Включено сохранение в автономном режиме в модуле Firebase:

Код: Выделить всё

init {
Firebase.database.setPersistenceEnabled(true)
}
Даже несмотря на эти изменения, я столкнулся с новой проблемой. Когда я перемещаю onPopUp непосредственно внутри блока launchCatching, навигация никогда не возвращается на предыдущую страницу, хотя данные обновляются правильно.
Соответствующий код:
ViewModel

Код: Выделить всё

fun onSaveClick(onPopUp: () -> Unit) {
launchCatching {
if (customer.value.id.isEmpty()) {
database.addCustomer(Customer(name = customer.value.name))
} else {
database.updateCustomer(customer.value)
}
onPopUp()
}
}
Пример репозитория: example-offline В этом репозитории достаточно только изменить репозиторий, чтобы увидеть и воспроизвести проблему.
Наблюдения:
Моя цель — лучше понять функциональность Firebase для автономных приложений и способы решения проблем с навигацией и производительностью при использовании базы данных реального времени или Firestore. Несмотря на трудности, я предпочитаю использовать Firestore из-за его рекомендаций по документации и преимуществ с моделями данных и потоками.
Вопросы:
  • < li>Каковы наилучшие методы обеспечения комфортной работы в автономном режиме с использованием базы данных Firebase Realtime или Firestore?
  • Как решить проблему с навигацией при использовании блока launchCatching с onPopUp в обеих базах данных?< /li>
    Почему база данных Realtime быстрее загружает автономные данные по сравнению с Firestore, который рекомендуется в качестве основного решения в документации для автономных приложений?
Любые рекомендации по этим вопросам будут очень полезны для улучшения автономной поддержки и навигации в моем приложении.

Подробнее здесь: https://stackoverflow.com/questions/786 ... tabase-and
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»