使用 Room Library 时数据库中的数据总是 returns 空数组

Data from database always returns Empty Array while using Room Library

我想问一下我的代码。当我在数据库中插入数据时没有显示错误,但是当我尝试 getAll 时,我只得到空数组。 我不知道哪里出了问题。我希望有人能给我解决这个问题。

这是我第一次使用 Room Library。

这是我的 Dao 界面:

@Dao
interface SampleDao {
@Query("SELECT * from Sample")
fun getAll():Single<List<Sample>>

@Insert
fun insertSampel(sample:Sample)

这是我的单例数据库:

@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)
                        }
                    }
            )
}

你调试问题的根源了吗?

在认为错误是 QUERY (get)

之前,您应该检查您的 INSERT 是否正常工作

由于您已经在使用 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 */);