【问题标题】:Unable to fetch data from Room database using view model无法使用视图模型从 Room 数据库中获取数据
【发布时间】:2021-07-10 16:13:09
【问题描述】:

我在我的应用程序中使用房间数据库,并且我正在使用 MVVM 设计模式。当我在访问 dao 方法时创建视图模型时,它会显示以下错误。

No value passed for parameter 'context'

下面是我的代码:

RoomDb.kt

@Database(entities=[UserEntity::class],version = 1)
abstract class RoomDb: RoomDatabase() {

abstract fun useDao():UserDao

companion object{

    private var INSTANCE:RoomDb ?= null

    fun getRooomDb(context: Context): RoomDb{

        if(INSTANCE == null){

          INSTANCE = Room.databaseBuilder<RoomDb>(
              context.applicationContext,RoomDb::class.java,"AppDb"
          ).allowMainThreadQueries().build()
        }

        return INSTANCE!!
     }
   }
}

UserDao

@Dao
interface UserDao {

@Query("SELECT * FROM Users ORDER BY id DESC")
fun getAllUsers(): List<UserEntity>

@Insert
fun insertUser(user: UserEntity)

@Delete
fun deleteUser(user: UserEntity)

}

HomeViewModel.kt

class HomeViewModel: ViewModel(){

fun allUser(){

    val db = RoomDb.getRooomDb().useDao()
  }
}

我在RoomDb.getRooomDb().useDao() 行中遇到错误。请告诉我如何解决此错误。

【问题讨论】:

    标签: kotlin mvvm android-room android-viewmodel


    【解决方案1】:

    我实际上在HomeViewModel 类中修复了它我必须使用AndroidViewModel 而不是ViewModel 因为在这种情况下我需要在视图模型中传递上下文ViewModel 没有任何方法来获取上下文但是在AndroidViewModel 中我们可以传递上下文,所以HomeViewModel.kt 应该是这样的:

    HomeViewModel.kt

    class HomeViewModel(application: Application): AndroidViewModel(application){
    
    fun allUser(): LiveData<List<UserEntity>> {
    
        val dao = RoomDb.getRooomDb(getApplication()).useDao()
     
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      相关资源
      最近更新 更多