使用Room Library时,数据库中的数据始终返回Empty Array
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Room Library时,数据库中的数据始终返回Empty Array相关的知识,希望对你有一定的参考价值。
我想问一下我的代码。我在数据库中插入数据时没有显示错误,但是当我尝试getAll时,我只得到空数组。我不知道哪里出错了。我希望有人可以帮我解决这个问题。
这是我第一次使用房间图书馆。
这是我的Dao界面:
@Dao
interface SampleDao {
@Query("SELECT * from Sample")
fun getAll():Single<List<Sample>>
@Insert
fun insertSampel(sample:Sample)
这是我的singletonDB:
@Database (entities = [Sample::class], version = 1)
abstract class SingletonDB : RoomDatabase() {
abstract fun sampleDao():SampleDao
companion object {
private var INSTANCE:SingletonDB? = null
fun getInstance(context: Context):SingletonDB?{
if (INSTANCE == null){
synchronized(SingletonDB::class){
INSTANCE = Room.databaseBuilder(context.applicationContext,
SingletonDB::class.java, "db")
.build()
}
}
return INSTANCE!!
}
fun destroyInstance() {
INSTANCE = null
}
}
这是房间数据库中的getAllData方法:
override fun getAll() {
mDB.sampleDao().getAll()
.subscribeOn(Schedulers.io())
.observeOn(androidSchedulers.mainThread())
.subscribe(object : SingleObserver<List<Sample>> {
override fun onSuccess(t: List<Sample>) {
Log.i(TAG, t.toString())
}
override fun onSubscribe(d: Disposable) {
}
override fun onError(e: Throwable) {
Log.i(TAG, e.message)
}
})
}
此代码用于在数据库中插入数据:
override fun insertSampel(id: Int, name: String, age: Int) {
val sample = Sample(id, name, age)
Completable.fromAction {
Thread {
Runnable {
mDB.sampleDao().insertSampel(sample)
}
}
}.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()).subscribe(
object : CompletableObserver {
override fun onComplete() {
Log.i(TAG, "Complete")
}
override fun onSubscribe(d: Disposable) {
}
override fun onError(e: Throwable) {
Log.i(TAG, e.message)
}
}
)
}
答案
你调试了问题的根源吗?
在认为错误是INSERT
(get)之前,你应该检查你的QUERY
是否正常工作
由于您已经使用Rx,请尝试将插入代码更改为:
val sample = Sample(id, name, age)
Completable.fromAction(() -> mDB.sampleDao()
.insertSampel(sample)) // By the way there's a typo here :)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) // If you want to observe
.subscribe(/* Handle the result and/or error */);
以上是关于使用Room Library时,数据库中的数据始终返回Empty Array的主要内容,如果未能解决你的问题,请参考以下文章
Room Persistence Library:迁移过程中的奇怪错误
从 SQLite 迁移到 Android Room Persistence Library
查看使用 Room Persistence Library 创建的数据库的内容
调用 Rooms inMemoryBuilder 方法时,Room Persistence Library 运行时异常