Android[Kotlin] - 错误 TypeError: ["Android"].showToast 不是函数

Posted

技术标签:

【中文标题】Android[Kotlin] - 错误 TypeError: ["Android"].showToast 不是函数【英文标题】:Android[Kotlin] - ERROR TypeError: ["Android"].showToast is not a function 【发布时间】:2021-11-13 11:36:11 【问题描述】:

我正在使用 WebChromeClient() 在 webview 中加载网页。每当用户从该下拉列表中选择我需要显示敬酒的项目时,该网页都有一个下拉列表。为此,我关注official doc 我已经实现了与文档所说的相同。仍然,我在控制台中收到错误。 “showToast 不是函数”。

在片段中:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) 
    super.onViewCreated(view, savedInstanceState)
    val webSettings = webView.settings
    webSettings.javascriptEnabled = true
    webSettings.domStorageEnabled = true
    webSettings.databaseEnabled = true
    webView.addJavascriptInterface(WebAppInterface(requireContext()), "android")

    webView.webChromeClient = object : WebChromeClient() 
        override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean 
            Log.i(TAG, consoleMessage.message())
            return true
        

        override fun onProgressChanged(view: WebView?, newProgress: Int) 
            super.onProgressChanged(view, newProgress)
            if (newProgress == 100) 
                if (webView != null) 
                    webView.settings.builtInZoomControls = true
                    webView.settings.displayZoomControls = false
                    webView.loadUrl("javascript:loadMobileDashboard($data);")
                
            
        
    
    webView.loadUrl(url)

WebAppInterface:

class WebAppInterface(private val context: Context) 
    private val TAG = WebAppInterface::class.java.simpleName

    @JavascriptInterface
    fun showToast(toast: String) 
        Log.d(TAG, "showToast: $toast")
    

我尝试了一些更改并在互联网上搜索了它并没有解决单一的解决方案。请让我知道我在这里犯了什么错误。谢谢:)

【问题讨论】:

【参考方案1】:

在您的资产文件夹中创建一个 html 页面,假设命名为 dropDown.html。

将此代码复制到该文件中

<input type="dropDown" value="Hello" onClick="showToastInWebView('strMsg')" />

<script type="text/javascript">
    function showToastInWebView(toast) 
        Android.showToast(toast);
    
</script>

现在像这样加载网址

myWebView.loadUrl("file:///android_asset/dropDown.html");

注意:webView不调用JS函数你已经添加了一个桥接,你需要使用你自己的网页(在本例中为dropDown.html)确实调用了该函数,本地(我们的案例)或网络上。

【讨论】:

以上是关于Android[Kotlin] - 错误 TypeError: ["Android"].showToast 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

错误记录Kotlin 编译报错 ( Type mismatch: inferred type is String? but String was expected )

kotlin内联(inline)函数中参数默认值报VerifyError: Bad local variable type错误的解决办法

kotlin内联(inline)函数中参数默认值报VerifyError: Bad local variable type错误的解决办法

kotlin内联(inline)函数中参数默认值报VerifyError: Bad local variable type错误的解决办法

Android studio,构建kotlin时出现奇怪错误:生成错误代码

Kotlin Field required a bean of type that could not be found 错误