使用Room Library时,数据库中的数据始终返回Empty Array

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

我想问一下我的代码。我在数据库中插入数据时没有显示错误,但是当我尝试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)
                        }
                    }
            )
}
android kotlin rx-java2 android-room mvp
1个回答
0
投票

你调试了问题的根源吗?

在认为错误是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 */);
© www.soinside.com 2019 - 2024. All rights reserved.