Обьеденить в один метод запрос с серва и запись в базу данных
У меня есть запрос из серва и из базы данных, суть в том, что бы при кадом запуске шла загрузка с базы данных, и с сервера который обновляет эту базу с помощью RxJava 2
Код который я придумал, но работает немножко не так
fun loadMovie(id: Int): Single<AboutMovie> = database.getMovie(id = id)
.onErrorResumeNext( aboutMovieService.getMovie(movieId = id) )
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
Ответы (1 шт):
Автор решения: Alex_Skvortsov
→ Ссылка
Я уже давно не работал с Rx, да и никогда не был в нем силен, поэтому качество кода оставляет желать лучшего. Тем не менее, задачу он решать должен.
Код писался без IDE, так что за опечатки не пинать)
fun loadMovie(id: Int): Single<AboutMovie> {
return aboutMovieService.getMovie(movieId = id) // Получаем данные от сервера
.flatMap { movie ->
database.putMovie(movie) // Сохраняем в БД
// Если putMovie не возвращает ничего, то строка, которая ниже, нужна
// Если putMovie возвращает Single<Movie>, то строка ниже НЕ нужна
// Если putMovie возвращает что-то другое, то пишите в комменты, что
Single.just(movie) // Отдаем дальше инфу, полученную от сервера
}
.onErrorResumeNext( database.getMovie(id = id) ) // в случае ошибки на одном из прошлых шагов берем данные из БД
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}