我要在Webview中显示一个自定义错误页面,该页面存储在默认的资产文件夹C:\Users\User\StudioProjects\Appname\app\src\main\assets\error.html
中
在onReceivedError
方法的WebViewClient
中,我像下面的view.loadUrl("file:///android_asset/error.html");
那样加载页面
当我编码和测试它时,它工作得很好,但是奇怪的是,我再次测试了它,Webview显示了这个错误
The webpage at file:///android_asset/error.html could not be loaded because: net::ERR_FILE_NOT_FOUND
我尝试了https://stackoverflow.com/a/37994555/4722232的解决方案,它适用于html,但是我在里面有一个徽标,有同样的问题,在我得到的日志中
"Not allowed to load local resource: file:///android_asset/logo.png", source: about:blank (0)
任何帮助都将不胜感激。
发布于 2020-06-25 16:59:03
中。
val htmlFile = "file:///android_asset/file_name.extension" //e.g. index.html
webView.loadUrl(htmlFile)
资产文件夹必须位于main
内
中。
val inputStream = assets.open("file_name.extension")
val buffer = BufferedInputStream(inputStream)
val bytes = buffer.readBytes()
val content = String(bytes)
buffer.close()
webView.loadData(String(content), "text/html", "utf-8")
raw
文件夹读取该文件。
res
-> raw
-> file_name.extension
val inputStream = resources.openRawResource(R.raw.index)
val buffer = BufferedInputStream(inputStream)
val bytes = buffer.readBytes()
val content = String(bytes)
buffer.close()
webView.loadData(String(content), "text/html", "utf-8")
您可以使用Kotlin扩展来简化此过程。
assets.open("file_name.extension").bufferedReader().use { br ->
webView.loadData(br.readText(), "text/html", "utf-8")
}
确保您的file_name.extension是小写的,并且只包含在res
或assets
文件夹中的_。
https://stackoverflow.com/questions/62574958
复制相似问题