Как получить данные из БД Room с помощью RxJava если с удаленного сервера пришла ошибка

Всем привет. Пишу приложение в котором запрашивается погода с удаленного сервера. Для Api запроса использую библиотеку Retrofit и RxJava. Сейчас мне нужно добавить в приложение БД Room, если при Api запросе получаю ошибку то нужно взять данные из БД и отобразить их пользователю, а если Api запрос прошел успешно то нужно сохранить данные в БД. Подскажите пожалуйста как это реализовать с помошью RxJava?

Интерфейс Dao

@Dao
interface WeatherDataDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insertWeatherData(weatherDataEntity: WeatherDataEntity): Single<WeatherDataEntity>

    @Query("SELECT * FROM weather_data WHERE city_name = :cityName AND date = :date ")
    fun getWeatherDataFromDb(cityName: String, date: String): Single<WeatherDataEntity>
}

Так выглядит код репозитория сейчас, мне нужно изменить его добавив туда БД

package com.example.data.implementationRepo

import com.example.data.apiservice.WeatherDataApiService
import com.example.data.mappers.WeatherDataMapper
import com.example.domain.models.WeatherData
import com.example.domain.repositories.WeatherDataRepository
import io.reactivex.rxjava3.core.Single

class WeatherDataRepositoryImpl(
    private val weatherDataApiService: WeatherDataApiService,
    private val mapper: WeatherDataMapper,
    private val weatherDataDao: WeatherDataDao
) : WeatherDataRepository {

    override fun getWeatherData(city: String, days: Int, degreeType: String): Single<WeatherData> =
        weatherDataApiService.getWeatherData(city, days, degreeType)
            .map { mapper.mapWeather(it) }

}

Ответы (1 шт):

Автор решения: Sergei Buvaka

Вы можете использовать метод onErrorReturn()

weatherDataApiService.getWeatherData(city, days, degreeType)
        .map { mapper.mapWeather(it) }
        .onErrorResumeNext { getDataFromCache() }

Если у вас уже есть готовое значение(например дефолтное какое-то) вы можете использовать onErrorReturn():

weatherDataApiService.getWeatherData(city, days, degreeType)
        .map { mapper.mapWeather(it) }
        .onErrorReturn { getDataFromCache() }
→ Ссылка