You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已在onCreate初始化lateinit变量仍未初始化报错求助

问题分析与解决方案

你遇到的问题核心原因很明确:在AppViewModelProvider.Factory中手动创建了FlashcardApplication的新实例,而非使用系统初始化好的全局Application对象。

系统只会在APP启动时创建唯一的FlashcardApplication实例,并自动调用它的onCreate()方法完成container的初始化。但你手动new FlashcardApplication()出来的实例,系统不会触发它的onCreate()生命周期方法,导致这个新实例里的container完全没被初始化,自然会抛出未初始化的异常。

修复后的Factory代码

import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewmodel.CreationExtras
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import com.example.flashcardapp.FlashcardApplication

object AppViewModelProvider {
    val Factory = viewModelFactory {
        initializer {
            // 获取系统已初始化的Application实例,而非手动创建
            val app = this[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY] as FlashcardApplication
            FlashcardViewModel(app.container.flashCardsRepository)
        }
    }
}

额外说明

在Activity或Fragment中获取ViewModel时,只需正常传递上下文即可,比如:

// 在MainActivity中
val viewModel = ViewModelProvider(this, AppViewModelProvider.Factory)[FlashcardViewModel::class.java]

这样就能确保ViewModel拿到的是已经完成container初始化的全局Application实例,问题就能解决。

内容的提问来源于stack exchange,提问作者Allen J Mathew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:07:22