Комната не вставляет данные - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу получить некоторые данные из 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() }

Почему данные не были сохранены?

...