没有记录保存在会议室数据库中

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

[当我使用mindValleyDao.getCategories().value取入数据并将其插入RoomDB后,它返回null

DatabaseClass

@Database(entities = arrayOf(CategoryBO::class), version = 1, exportSchema = false)
abstract class MindValleyDatabase : RoomDatabase(){

    abstract fun mindValleyDao(): MindValleyDao

    companion object {
        // Singleton prevents multiple instances of database opening at the
        // same time.
        @Volatile
        private var INSTANCE: MindValleyDatabase? = null

        fun getDatabase(context: Context): MindValleyDatabase {
            val tempInstance = INSTANCE
            if (tempInstance != null) {
                return tempInstance
            }
            synchronized(this) {
                val instance = Room.databaseBuilder(
                        context.applicationContext,
                        MindValleyDatabase::class.java,
                        "mindvalley_database"
                ).allowMainThreadQueries()
                        .fallbackToDestructiveMigration().build()
                INSTANCE = instance
                return instance
            }
        }
    }
}

CategoryBO.kt

@Entity(tableName = "CategoryEntity")
data class CategoryBO( @PrimaryKey(autoGenerate = true) val id:Int, val name:String)

Doa

@Dao
interface MindValleyDao {

    @Query("SELECT * from CategoryEntity ORDER BY id ASC")
    fun getCategories(): LiveData<List<CategoryBO>>

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    fun insert(categoryBO: CategoryBO)
    //suspend fun insert(categoryBO: CategoryBO)

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    fun insert(categoryBOList: List<CategoryBO>)
}

我通过插入类别并获取类似类别的列表来进行测试

class MindValleyViewModelNew @Inject constructor() : BaseViewModel() {

    var categoryList: MutableLiveData<List<CategoryBO>> = MutableLiveData()
    private lateinit var mindValleyDao:MindValleyDao

    fun loadDatabase(mContext:Context){
        mindValleyDao = MindValleyDatabase.getDatabase(mContext).mindValleyDao()
        GlobalScope.launch(Dispatchers.IO) {
            mindValleyDao.insert(CategoryBO(0,"first item"))
            val cats = mindValleyDao.getCategories().value
            categoryList.postValue(cats)
        }
    }
}
android kotlin android-room android-viewmodel
1个回答
0
投票
mindValleyDao.getCategories()的返回类型为LiveData,这就是为什么它查询值异步的原因,您不应该调用.value
© www.soinside.com 2019 - 2024. All rights reserved.