Android Kotlin WebView NullPointerException

Posted

技术标签:

【中文标题】Android Kotlin WebView NullPointerException【英文标题】: 【发布时间】:2021-11-30 13:22:26 【问题描述】:

我正在尝试设置一个基本的 webview 应用程序,但我遇到了这个错误,我对 android 开发不太了解,只是试图做一些简单的测试。

package com.fabledBits.roll4init

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

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

    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

    

错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.fabledBits.roll4init, PID: 10810
    java.lang.NullPointerException
        at com.fabledBits.roll4init.MainActivity.onBackPressed(MainActivity.kt:12)
        at android.app.Activity.onKeyUp(Activity.java:3784)
        at android.view.KeyEvent.dispatch(KeyEvent.java:2866)
        at android.app.Activity.dispatchKeyEvent(Activity.java:4090)

【问题讨论】:

【参考方案1】:

onCreate(),你有:

val webView = findViewById<WebView>(R.id.webView)

这会创建一个名为webView局部变量,这就是您要为其赋值的对象。

但是,它与您的可空 webView 属性同名。 onCreate() 将填充局部变量,因此 webView 属性为 null

你有两个问题。

首先,您使用的是!!。这表示“如果表达式的计算结果为 null,我想使应用程序崩溃”。使应用程序崩溃对用户非常不利。 切勿使用!!,除非您绝对确定要让应用程序崩溃。做其他事情,例如使用安全呼叫 (?.)。

其次,你可能不想要那个局部变量,所以把val webView = findViewById&lt;WebView&gt;(R.id.webView)改成:

webView = findViewById<WebView>(R.id.webView)

现在,您将为属性分配一个值,以供 onBackPressed() 使用。

【讨论】:

以上是关于Android Kotlin WebView NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Android Kotlin 在 WebView 中加载 URL?

使用 Kotlin 的 Android Studio WebView“期望成员声明”

android中通过kotlin使用WebView

如何在 Kotlin Android 中将字符串转换为 JSON 对象 [重复]

Android Kotlin Promise 是啥?

Flutter web app中注入Android对象的Android webview调用方法