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

为何调用CustomProgressDialog.show()时会出现空指针异常?

空指针异常原因分析及解决方法

针对你在调用customProgressDialog.show()时出现的空指针异常,主要有以下几种可能的原因及对应解决方案:

1. Dialog初始化阶段触发空指针(误判为show()时报错)

你在创建CustomProgressDialog实例后立刻调用window!!.setBackgroundDrawableResource(...),但Dialog的window对象是在show()执行过程中才会被系统初始化的。刚创建Dialog实例时,window处于null状态,使用非空断言!!强制访问会直接抛出空指针异常,只是你误以为报错发生在show()调用时。

解决方法:

将设置window的代码移到CustomProgressDialog的onCreate方法中(此时window已完成初始化):

class CustomProgressDialog(context: Context) : Dialog(context) {
    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.progress_layout)
        // 在这里设置window属性
        window?.setBackgroundDrawableResource(R.color.transparent)
        setCancelable(false)
    }
}

HomeActivity中的初始化代码简化为:

private lateinit var customProgressDialog: CustomProgressDialog

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // ...其他初始化逻辑
    customProgressDialog = CustomProgressDialog(this@HomeActivity)
}

2. customProgressDialog未初始化就被调用

如果serverCheckLogin()的执行时机早于HomeActivity.onCreate()(比如在Activity生命周期早期回调、或异步回调提前触发),lateinit修饰的customProgressDialog还未被赋值,访问时会抛出UninitializedPropertyAccessException,部分日志工具可能误显示为空指针异常。

解决方法:

  • 确保serverCheckLogin()在onCreate()执行完毕后再调用,比如将触发逻辑放在onStart()或onResume()中;
  • 调用前添加初始化检查:
if (::customProgressDialog.isInitialized) {
    customProgressDialog.show()
}

3. Activity重建导致Dialog实例失效

若HomeActivity因配置变更(如屏幕旋转)重建,原customProgressDialog实例关联的已销毁Activity上下文失效,调用show()会触发空指针。

解决方法:

在Activity销毁时清理Dialog,重建时重新初始化:

override fun onDestroy() {
    super.onDestroy()
    if (::customProgressDialog.isInitialized && customProgressDialog.isShowing) {
        customProgressDialog.dismiss()
    }
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // ...其他初始化逻辑
    customProgressDialog = CustomProgressDialog(this@HomeActivity)
}

内容的提问来源于stack exchange,提问作者Vinit Grover

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:42:40