我想从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() }
为什么不保存数据?