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

时间:2019-04-24 10:31:56

标签: android kotlin rx-java2 android-room mvp

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

这是我第一次使用Room Library。

这是我的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)
                        }
                    }
            )
}

1 个答案:

答案 0 :(得分:0)

您是否调试了问题的根源?

在认为错误为INSERT(获取)之前,应检查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 */);