【问题标题】:Reading local file to open in Android WebView using URL使用 URL 读取本地文件以在 Android WebView 中打开
【发布时间】:2022-02-01 07:55:36
【问题描述】:

我想读取一个本地 html 文件以在 Android WebView 中打开它。

为什么以下工作:

webViewMain.apply {
            loadUrl("file:///android_asset/index.html")
        }

但是这段代码

webViewMain.loadDataWithBaseURL("file:///android_asset/",
            URL("file:///android_asset/index.html").readText(Charset.forName("UTF-8")),
            "text/html",
            "UTF-8",
            null)

给我以下错误:java.io.FileNotFoundException: /android_asset/index.html

【问题讨论】:

  • 资产中的文件不被视为本地文件。请告知您的文件存放在哪里。
  • 我要加载的文件在我项目的app/src/main/assets/...文件夹中。
  • URL("file:///android_asset/index.html").readText() 这行不通,会给你例外。问题不是为什么这不起作用,而是为什么你认为这样的结构可以起作用。问题也是为什么你不满足于你的第一个解决方案。
  • 如果你想读取资产资源中文件的文本,你应该使用 getAssets().openInputStream("index.html");并从流中读取文本。但是仍然不清楚为什么你会以这种方式阅读文本。只需使用您的第一个解决方案,WebView 也会读取 .js 和 .css 文件。
  • app/src/main/assets/... folder of my project. 确实。那是您的开发机器上的一个文件夹。不在您的 Android 设备上。在您的 Android 设备上,资产成为一种资源。

标签: android html kotlin android-webview


【解决方案1】:

android 文件应位于项目根目录的 assets 文件夹中。

assets/index.html

如果您在资源管理器中看到结构,它将是

/app/src/main/assets/index.html

并致电webViewMain.loadUrl("file:///android_asset/index.html");

检查事项:

确保您的资产文件夹拼写正确

该文件位于正确的目录中,因为它为您提供了 FileNotFoundException

【讨论】:

  • 我使用 IDE 创建资产文件夹,所以拼写应该没问题。而且我可以将带有webView.apply { loadUrl("file:///android_asset/index.html") } 的文件加载到我的WebView 中。但是,由于我想包含 JS 文件,因此建议使用loadDataWithBaseURL(...)。但是使用带有上述参数的第二个命令不起作用。
猜你喜欢
  • 2018-08-19
  • 2012-07-21
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多