房间未插入数据

时间:2019-04-23 14:17:18

标签: android kotlin android-room android-database

我想从api中获取一些数据并保存到本地数据库(如果已经存在),则不要保存它。 api返回电影列表。

但是当我打开应用程序时,我的日志始终显示数据库为空:

  

存储库DB ***: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>>

}

id来自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() }

为什么不保存数据?

0 个答案:

没有答案