java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.

java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter favicon

WebView在java上无错误,移植到kotlin报错问题记录,希望能帮到你

java中的写法

        webView = findViewById(R.id.web_view);
        initWebView();
        if (savedInstanceState != null) {
            webView.restoreState(savedInstanceState);
        } else {
            webView.loadUrl("https://baidu.com/");
        }
        webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);

            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });

kotlin中的写法

        webView = findViewById(R.id.web_view)
        initWebView()
        if (savedInstanceState != null) {
            webView!!.restoreState(savedInstanceState)
        } else {
            webView!!.loadUrl("https://baidu.com/")
        }
        webView!!.webViewClient = object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                view.loadUrl(url)
                return true
            }

            override fun onPageStarted(view: WebView, url: String, favicon: Bitmap) {
                super.onPageStarted(view, url, favicon)
            }

            override fun onPageFinished(view: WebView, url: String) {
                super.onPageFinished(view, url)
            }
        }

两种写法一毛一样,但是使用kotlin运行就出现了崩溃问题,

崩溃日志:
    java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter favicon
        at com.xxx.xxx.xxxxActivity$onCreate$1.onPageStarted(Unknown Source:12)
        at Ob.c(chromium-SystemWebView.apk-default-410412053:2)
        at to.handleMessage(chromium-SystemWebView.apk-default-410412053:162)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7705)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:952)

原因就是因为有一个方法里面的参数需要设置为可以空的才可以

            override fun onPageStarted(view: WebView, url: String, favicon: Bitmap) {
                super.onPageStarted(view, url, favicon)
            }
            override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) {
                super.onPageStarted(view, url, favicon)
            }

加上可为空之后,运行正常。希望上述处理能帮到你。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kotlin中,`java.lang.NullPointerException: null cannot be cast to non-null type`是一个常见的运行时错误,它发生在尝试将null值转换为非空类型(如引用类型)时。这是因为Kotlin是一种强类型语言,它不允许你对可能为null的对象执行非空类型的操作。 当你遇到这个错误时,通常意味着你在代码的某个地方尝试调用了一个方法或访问了一个属性,而该对象在运行时是null。例如: ```kotlin val myObject: MyNonNullClass? = null // 声明一个可为null的对象 myObject?.doSomething() // 这里会抛出异常,因为doSomething()期望myObject不为null // 或者在访问属性时 val myValue = myObject?.myProperty // 如果myObject为null,myProperty会被视为null,尝试访问会导致异常 ``` 解决这个问题的方法有几种: 1. 在调用或访问前进行安全检查:使用`?.`(safe call operator)来防止null安全问题,如果对象为null,表达式将返回null,不会抛出异常。 ```kotlin if (myObject != null) { myObject.doSomething() } ``` 2. 使用`also`扩展函数:当需要执行一些操作但不关心是否为null时,可以在null安全上下文中使用`also`。 ```kotlin myObject?.also { it.doSomething() } ``` 3. 初始化变量或方法参数时设置默认值:如果不确定值是否为null,可以在声明时设置默认值。 ```kotlin val myObject = myObject ?: MyNonNullClass() // 如果myObject为null,创建一个新的MyNonNullClass实例 ``` 4. 使用可空类型(nullable types):如果你确实希望某个变量可以是null,那么声明时使用`MyNonNullClass?`而不是`MyNonNullClass`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值