【问题标题】:Android Kotlin WebView NullPointerExceptionAndroid Kotlin WebView NullPointerException
【发布时间】:2023-04-04 11:21:02
【问题描述】:

我正在尝试设置一个基本的 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)

【问题讨论】:

    标签: android kotlin webview


    【解决方案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() 使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2017-11-15
      • 2020-11-02
      相关资源
      最近更新 更多