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<WebView>(R.id.webView)
改成:
webView = findViewById<WebView>(R.id.webView)
现在,您将为属性分配一个值,以供 onBackPressed()
使用。
【讨论】:
以上是关于Android Kotlin WebView NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Android Kotlin 在 WebView 中加载 URL?
使用 Kotlin 的 Android Studio WebView“期望成员声明”