Kotlin:尝试在 WebView 上添加 onReceivedError 时出现“修改器‘覆盖’不适用于‘本地函数’”错误

Posted

技术标签:

【中文标题】Kotlin:尝试在 WebView 上添加 onReceivedError 时出现“修改器‘覆盖’不适用于‘本地函数’”错误【英文标题】:Kotlin: Getting "Modifier 'override' is not applicable to 'local function'" error when try to add onReceivedError on a WebView 【发布时间】:2021-12-22 10:27:11 【问题描述】:

当我尝试处理 webView 上的错误“修改器'覆盖'不适用于'本地函数'”时出现此错误

如果我在此处删除“覆盖”一词,应用程序会运行,但 webView 不会处理错误,如果我添加“覆盖”一词,则应用程序不会运行

override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) 
webView.loadUrl("about:blank")                
Toast.makeText(this, "Favor de conectarse a la red de EJ", Toast.LENGTH_SHORT).show()
            

这是我的全部代码,目标是在 webView 没有加载目标页面时显示一条消息并加载一个空白页面

package com.example.myApp

import android.os.Bundle
import android.view.WindowManager
import android.webkit.*
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*


class MainActivity : AppCompatActivity() 

    private val BASE_URL = "http://myPage/instruccion/"

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        webView.webChromeClient = object : WebChromeClient() 

        

        webView.webViewClient = object : WebViewClient() 

        

        val settings :WebSettings = webView.settings
        settings.javascriptEnabled = true
        settings.builtInZoomControls = true
        settings.setSupportZoom(true)
        webView.loadUrl(BASE_URL)
        window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)

        override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) 
            webView.loadUrl("about:blank")                
            Toast.makeText(this, "Favor de conectarse a la red de EJ", Toast.LENGTH_SHORT).show()
            
        

    override fun onBackPressed() 
        if (webView.canGoBack()) 
        webView.goBack()
         else 
            super.onBackPressed()
        
    

【问题讨论】:

【参考方案1】:

我刚刚做了一些更改,现在可以工作了,这就是解决方案:

webView.webViewClient = object : WebViewClient() 

            override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) 
                webView.loadUrl("about:blank")                
                Toast.makeText(this, "Favor de conectarse a la red de EJ", Toast.LENGTH_SHORT).show()
            

    

【讨论】:

以上是关于Kotlin:尝试在 WebView 上添加 onReceivedError 时出现“修改器‘覆盖’不适用于‘本地函数’”错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Webview 将对象从 Javascript 发送到 Kotlin

Android Webview 文件和相机上传 - Kotlin

在 Kotlin 中使用 MVVM 实现两种方式的数据绑定 WebView

Kotlin Load WebView 每次都无法正常工作

Android Kotlin WebView NullPointerException

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