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

设置列表适配器时出现lateinit property has not been initialized异常求助

解决lateinit property has not been initialized异常

问题原因

你在onCreate方法中直接使用tumBurcBilgileri创建适配器,但从未调用过初始化该变量的veriKaynagiHazirla()方法,导致标记为lateinit的变量在未完成初始化时就被访问,触发了UninitializedPropertyAccessException异常。

修复方案

方案1:提前调用初始化方法

在onCreate中创建适配器之前,先调用veriKaynagiHazirla()完成变量初始化:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    // 先初始化数据源
    veriKaynagiHazirla()
    // 再创建适配器
    val myBaseAdapter = BurclarBaseAdapter(this, tumBurcBilgileri)
    ListBurclar.adapter = myBaseAdapter
}

方案2:避免使用lateinit(更安全)

直接在声明时初始化变量,从根源避免未初始化问题:

class MainActivity() : AppCompatActivity() {
    // 直接初始化空列表,无需lateinit
    private val tumBurcBilgileri = ArrayList<Burc>(12)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        veriKaynagiHazirla()
        val myBaseAdapter = BurclarBaseAdapter(this, tumBurcBilgileri)
        ListBurclar.adapter = myBaseAdapter
    }

    private fun veriKaynagiHazirla(){
        val burclar = resources.getStringArray(R.array.Burc)
        val burcTarihleri = resources.getStringArray(R.array.burcTarih)
        val burcResimleri = arrayOf(R.drawable.koc1, R.drawable.boga2, R.drawable.ikizler3,
            R.drawable.yengec4, R.drawable.aslan5,
            R.drawable.basak6, R.drawable.terazi7, R.drawable.akrep8,
            R.drawable.yay9, R.drawable.oglak10, R.drawable.kova11,
            R.drawable.balik12)
        val buyukBurcResim = arrayOf(R.drawable.koc_buyuk1, R.drawable.boga_buyuk2,
            R.drawable.ikizler_buyuk3, R.drawable.yengec_buyuk4, R.drawable.aslan_buyuk5,
            R.drawable.basak_buyuk6, R.drawable.terazi_buyuk7, R.drawable.akrep_buyuk8, R.drawable.yay_buyuk9,
            R.drawable.oglak_buyuk10, R.drawable.kova_buyuk11, R.drawable.balik_buyuk12)

        val burcGenelOzellikler = resources.getStringArray(R.array.burcGenelOzellikler)

        for (i in 0..11){
            val arayListeAtanacakBurc = Burc(burclar[i], burcTarihleri[i], burcResimleri[i], buyukBurcResim[i],
                burcGenelOzellikler[i])
            tumBurcBilgileri.add(arayListeAtanacakBurc)
        }
    }
}

额外提示

  • lateinit仅适用于非空类型变量,且必须在第一次访问前完成初始化,否则必然抛出异常。
  • 对于集合类变量,优先直接初始化或使用lazy委托,能有效减少这类运行时异常的发生。

内容的提问来源于stack exchange,提问作者orhan berkil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:27:14