Данные из базы данных всегда возвращают пустой массив при использовании библиотеки комнат - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу спросить о моем коде. Ошибка не отображается, когда я вставляю данные в базу данных, но когда я пытаюсь получить все, я просто получаю пустой массив. Я не знаю, где это идет не так. Я надеюсь, что кто-то может дать мне решение этой проблемы.

Я впервые использую Библиотеку комнат.

Это мой интерфейс для Дао:

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

@Insert
fun insertSampel(sample:Sample)

Это мой синглтонDB:

@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 голосов
/ 24 апреля 2019

Отладили ли вы происхождение проблемы?

Вы должны проверить, правильно ли работает INSERT, прежде чем думать, что ошибка QUERY (get)

Поскольку вы уже используете 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 */);
...