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

Android Kotlin WebView应用运行出现NullPointerException报错如何解决

问题根因

崩溃由两个代码问题共同触发:

  • 变量遮蔽:类顶部声明的全局webView变量初始值为null,onCreate方法中又用val webView = findViewById<WebView>(R.id.webView)重新定义了同名局部变量,全局的webView始终没有被赋值,一直为null
  • 不安全的非空断言:onBackPressed方法中使用!!对全局空的webView做强制非空转换,直接触发空指针异常
修复方案

将全局webView改为lateinit非空类型,onCreate中直接给全局变量赋值即可,修复后完整代码如下:

package com.fabledBits.roll4init

import android.app.Activity
import android.os.Bundle
import android.webkit.WebView
import android.webkit.WebViewClient

class MainActivity : Activity() {
    // 声明非空全局变量,晚些再初始化
    private lateinit var webView: WebView

    override fun onBackPressed() {
        if (webView.isFocused && webView.canGoBack()) {
            webView.goBack()
        } else {
            super.onBackPressed()
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        title = "roll4init"

        // 直接给全局变量赋值,不要加val重复声明局部变量
        webView = findViewById<WebView>(R.id.webView)
        webView.webViewClient = WebViewClient()
        webView.loadUrl("http://google.com")

        val webSettings = webView.settings
        webSettings.javaScriptEnabled = true
        webSettings.domStorageEnabled = true
        webSettings.allowFileAccess = true
    }
}

可选兼容方案

如果不能确定布局中一定存在对应id的WebView,可以用可空类型加空安全调用避免崩溃:

class MainActivity : Activity() {
    private var webView: WebView? = null

    override fun onBackPressed() {
        webView?.let {
            if (it.isFocused && it.canGoBack()) {
                it.goBack()
                return
            }
        }
        super.onBackPressed()
    }

    // onCreate代码和上面一致,直接给webView赋值即可
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:09:03