Я хочу получить некоторые данные из API и сохранить их в моей локальной базе данных, если они уже есть, не сохраняйте их.API возвращает список фильмов.
Но когда я открываю приложение, мой журнал всегда показывает, что база данных пуста:
БД РЕПОЗИЦИИ ***: 0
class FilmRepositoryImpl(private val dao: FilmDAO, private val api: FilmApi) :
FilmRepository {
override fun getFilms(): Observable<List<Film>> {
val observableFromDb = getFilmsFromDb()
val observableFromApi = getFilmsFromApi()
return Observable.merge(observableFromDb, observableFromApi)
}
private fun getFilmsFromApi(): Observable<List<Film>> {
return api.getFilms()
.doOnNext { list ->
Log.e("REPOSITORY API * ", list.size.toString())
list.forEach { dao.saveFilm(it) }
// dao.saveAll(it)
}
}
private fun getFilmsFromDb(): Observable<List<Film>> {
return dao.findAll()
.toObservable()
.doOnNext {
Log.e("REPOSITORY DB *** ", it.size.toString())
}
}
Я пытался вставить весь список и фильм по фильмам, но ничего из этого не помогло.
@Dao
interface FilmDAO {
@Insert(onConflict = OnConflictStrategy.IGNORE)
fun saveAll(entities: List<Film>)
@Insert(onConflict = OnConflictStrategy.IGNORE)
fun saveFilm(film: Film)
@Query("SELECT * FROM film WHERE id = :id")
fun findById(id: String): Film
@Query("SELECT * FROM film")
fun findAll(): Flowable<List<Film>>
}
Идентификатор получен из API
@Entity(tableName = "film")
data class Film(
@PrimaryKey
val id: String,
val title: String,
val description: String,
val director: String,
val producer: String,
val release_date: String,
val rt_score: String,
var poster_url : String
)
Я использую Koin для DI иЯ настраиваю свою БД следующим образом:
single {
Room.databaseBuilder(androidApplication(), FilmDatabase::class.java, "film-db")
.allowMainThreadQueries()
.build()
}
single { get<FilmDatabase>().filmDAO() }
Почему данные не были сохранены?