android - room数据库没有创建架构组件

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

我正在使用android架构组件和MVVM,我正在使用空间进行离线模式,这是我建立连接的代码:

    @Database(entities = arrayOf(Cat::class), version = 1)
abstract class DbConnection : RoomDatabase() {
    abstract fun CategoryDao(): CategoryDao

companion object {
    private var INSTANCE: DbConnection? = null

    fun getInstance(context: Context): DbConnection? {
        if (INSTANCE == null) {
            synchronized(DbConnection::class) {
                INSTANCE = Room.databaseBuilder(
                    context.getApplicationContext(),
                    DbConnection::class.java, Const.db_Name
                ).build()
            }
        }
        return INSTANCE
    }

    fun destroyInstance() {
        INSTANCE = null
    }
}

这是我的DAO课程:

    @Dao
interface CategoryDao{
    @Query("select * from $db_categoryTable")
    fun getCatOffline():Single<List<Cat>>

    @Insert(onConflict = REPLACE)
    fun insert(cat:Cat)
}

这是我的Cat课程:

        @Entity(tableName = Const.db_categoryTable)
    data class Cat(
        @PrimaryKey(autoGenerate = true)
        @SerializedName("id")
        @Expose
        val id: Int,
        val date_update: String,
        val name: String,
        val numCards: Int,
        val uid: String
    )

and this is my model class :

    class CategoryModel(
    private val netManager: NetManager,
    private val sharedPrefManager: SharedPrefManager
) {
    var dateChanges: String = "null";

    private lateinit var categoryDao: CategoryDao
    private lateinit var dbConnection: DbConnection

    fun getCats(): MutableLiveData<MutableList<Cat>> {
        dbConnection= DbConnection.getInstance(MyApp.INSTANCE)!!
        categoryDao=dbConnection.CategoryDao()

        if (netManager.isConnected!!) {
            return  getCatsOnline();
        } else {
            return getCatsOffline();
        }
    }

    private fun getCatsOffline(): MutableLiveData<MutableList<Cat>> {
        Log.v("this","offline ");

        var list = MutableLiveData<MutableList<Cat>>();

        categoryDao.getCatOffline()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                {subccess->
                    list+=subccess
                },{
                    error->
                    Log.v("This",error.localizedMessage)
                }
            )
        return list
    }

    private fun getCatsOnline(): MutableLiveData<MutableList<Cat>> {
        Log.v("this","online ");
        var list: MutableLiveData<MutableList<Cat>> = MutableLiveData()
        val getCats = ApiConnection.client.create(Category::class.java)

        getCats.getCats(sharedPrefManager.getUid(), dateChanges)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                { success ->
                    list += success.cats
                }, { error ->
                    Log.v("this", "ErrorGetCats " + error.localizedMessage);
                }
            )

        return list;
    }

    operator fun <T> MutableLiveData<MutableList<T>>.plusAssign(values: List<T>) {
        val value = this.value ?: arrayListOf()
        value.addAll(values)
        this.value = value
    }

}

你可以看到的模型类有两个部分,当它有一个互联网连接,它上线,否则,它会脱机。

问题是,它创建了数据库但是当我下载并浏览它时,它没有任何表和内容,它只是一个空数据库,所以当它进入离线模式时它不会获得任何值。

这段代码有什么问题?

android android-room android-architecture-components android-viewmodel android-mvvm
1个回答
1
投票

查看上面的代码,您似乎没有在房间中插入任何数据。您还应该在getCatsOnline()中的Room中插入数据,这样当您访问Room时,您将能够获取数据。

© www.soinside.com 2019 - 2024. All rights reserved.