Kotlin:必须在同一线程上调用所有 WebView 方法

msm*_*919 1 android webview kotlin

这是我的 kotlin 代码:

class WebAppInterface(private val mContext: Context, private val myWebView: WebView) {
    @JavascriptInterface
    fun goToHello() {
        val myWebView = myWebView
        myWebView.loadUrl("file:///android_asset/hello.html")
    }
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val myWebView: WebView = findViewById(R.id.webview)
        myWebView.settings.javaScriptEnabled = true
        myWebView.addJavascriptInterface(WebAppInterface(this, myWebView), "Android")
        myWebView.loadUrl("file:///android_asset/index.html")
    }
}
Run Code Online (Sandbox Code Playgroud)

但它是崩溃的。

引起:java.lang.Throwable:在线程“JavaBridge”上调用了 WebView 方法。所有 WebView 方法都必须在同一线程上调用。

我怎样才能解决这个问题?我通过搜索找到了一个解决方案,但这是 java 代码。Kotlin 和 Java 兼容,但由于语法错误而无法运行。(我想是因为我不懂 Kotlin 和 Java。反正)

我是一个基于 JavaScript 的全栈开发人员,我没有任何 Android 知识,所以我只想使用 webviews。但这对我来说也是非常困难的。(这就像我第一次学习 JavaScript 时的混乱时期。)

请告诉我解决方法。附:如果您有 Kotlin 的继承和范围概念的好列表,请链接。

Rom*_*man 5

您应该使用Runnable和 Post to WebView Handler

myWebView.post(Runnable {
   myWebView.loadUrl("file:///android_asset/index.html")
})
Run Code Online (Sandbox Code Playgroud)