0 android viewmodel kotlin android-studio android-room
我是 Kotlin 和 Android Studio 的新手,现在尝试使用 ViewModel 实现 Room 数据库,但我面临问题“kotlin.UninitializedPropertyAccessException:lateinit 属性habitViewModel 尚未初始化”
我认为这是由于视图模型的早期初始化造成的,但我找不到修复它的方法。
这是我下面的代码。
创建代码时的活动
class HabitActivity : AppCompatActivity() {
lateinit var binding : ActivityHabitBinding
lateinit var habitViewModel : HabitViewModel
lateinit var habitAdapter: HabitAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityHabitBinding.inflate(layoutInflater)
habitViewModel = ViewModelProvider(this)[habitViewModel::class.java]
setContentView(binding.root)
// view model
habitViewModel.habitList.observe(this) {
habitAdapter.update(it)
}
// adapter
habitAdapter = HabitAdapter(this)
binding.rvHabitList.layoutManager = LinearLayoutManager(this)
binding.rvHabitList.adapter = habitAdapter
}
Run Code Online (Sandbox Code Playgroud)
视图模型代码
class HabitViewModel: ViewModel() {
val habitList: LiveData<MutableList<HabitDTO>>
private var habitRepository: HabitRepo = HabitRepo.get()
init {
habitList = habitRepository.list()
}
}
Run Code Online (Sandbox Code Playgroud)
Build.Gradle 依赖项
def arch_version = "2.1.0"
def lifecycle_version = "2.5.0-rc02"
def roomVersion = "2.4.2"
// Room
implementation("androidx.room:room-runtime:$roomVersion")
kapt("androidx.room:room-compiler:$roomVersion")
implementation("androidx.room:room-ktx:$roomVersion")
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
kapt 'org.xerial:sqlite-jdbc:3.34.0'
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
Run Code Online (Sandbox Code Playgroud)
这是我的错误消息捕获 错误消息
您的问题是这一行,您尝试使用正在初始化的对象的实例
habitViewModel = ViewModelProvider(this)[habitViewModel::class.java]
Run Code Online (Sandbox Code Playgroud)
参数应该是类名,而不是实例名
habitViewModel = ViewModelProvider(this)[HabitViewModel::class.java]
Run Code Online (Sandbox Code Playgroud)
如果您有正确的 -ktx gradle 依赖项,您还可以使用此语法而不是lateinit var在 Kotlin 中获取 ViewModel 的方法 ( implementation 'androidx.activity:activity-ktx:1.5.0')
private val habitViewModel: HabitViewModel by viewModels()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |