无法插入房间,不确定如何调试

问题描述 投票:0回答:1

我正在学习室并创建:

@Entity
data class Result(
    @PrimaryKey(autoGenerate = true) var rId: Long,
    var title: String?,
    var url: String?,
    @Ignore val multimedia: List<Multimedia>?
) {

    constructor(rId: Long, title: String?, url: String?) : this(rId, title, url, null)

    @Dao
    interface ResultDao {
        @Transaction
        @Query("SELECT * FROM Result")
        fun getResults(): List<ResultWithMultimedia>

        @Insert(onConflict = OnConflictStrategy.REPLACE)
        fun insertResults(results: List<Result>): Completable
    }
}

@Entity
data class Multimedia(
    @PrimaryKey(autoGenerate = true) val mId: Long,
    val resultId: Long,
    val url: String?,
    val caption: String?
)

结果和多媒体也是翻新的模型。 json响应包含多媒体属性。我按照https://developer.android.com/training/data-storage/room/relationships#one-to-many尝试尝试并保持结果。这是一个相同的示例,结果基本上是“用户”,而多媒体基本上是“播放列表”。我创建了:

data class ResultWithMultimedia(
    @Embedded var result: Result,
    @Relation(
        parentColumn = "rId",
        entityColumn = "mId"
    )
    var multimedia: List<Multimedia>
)

我尝试使用“ resultDao.insertResults(resultList)”插入列表,但似乎没有任何持久性。我正在使用以下方法获得结果:

private fun getDatabaseResults(): Single<List<Result>?> {
    return Single.defer {
        Single.just(
            resultDao.getResults().map {
                Result(it.result.rId, it.result.title, it.result.url, it.multimedia)
            }.toList()
        )
    }
}

我的数据库文件:

@Database(version = 1, entities = [Result::class, Multimedia::class])
abstract class ResultsDatabase: RoomDatabase() {

    abstract fun resultDao(): Result.ResultDao

    companion object {
        @Volatile private var INSTANCE: ResultsDatabase? = null

        fun getInstance(context: Context): ResultsDatabase =
            INSTANCE ?: synchronized(this) {
                INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
            }

        private fun buildDatabase(context: Context) =
            Room.databaseBuilder(
                context.applicationContext,
                ResultsDatabase::class.java,
                "Results.db").build()
    }
}
android android-room android-architecture-components android-jetpack
1个回答
0
投票

Completable的结果是什么。我认为,如果未插入任何内容,则表示有错误,并且会抛出onFailCompletable

© www.soinside.com 2019 - 2024. All rights reserved.