UninitializedPropertyAccessException in Android Studio with



我是Kotlin和Android Studio的新手,现在试图用ViewModel实现Room数据库,但我面临的问题" Kotlin。UninitializedPropertyAccessException: lateinit属性habitViewModel未被初始化">

我认为这是由于视图模型的早期初始化,但我找不到解决它的方法。

下面是我的代码

Activity OnCreate Code

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

}
<<p>ViewModel代码/strong>

class HabitViewModel: ViewModel() {
val habitList: LiveData<MutableList<HabitDTO>>
private var habitRepository: HabitRepo = HabitRepo.get()

init {
habitList = habitRepository.list()
}
}

构建。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")

捕获,这是我的错误消息错误味精

您的问题是这一行,您试图使用您正在初始化的对象的实例

habitViewModel = ViewModelProvider(this)[habitViewModel::class.java]

参数应该是类名,而不是实例名

habitViewModel = ViewModelProvider(this)[HabitViewModel::class.java]

如果你有正确的-ktx gradle依赖项(implementation 'androidx.activity:activity-ktx:1.5.0')

,你也可以使用这种语法而不是lateinit var方法来获得Kotlin中的ViewModel
private val habitViewModel: HabitViewModel by viewModels()

最新更新