如何使用Android Studio将html文件加载到文件夹中的android上的webview?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (35)

我正在使用Android Studio / Gradle。

app \ src \ main \ android_asset文件夹中有名为chart.html的文件..

我试图加载这个文件到我的webview像这样:

WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///android_asset/chart.html");
setContentView(view);

但我总是得到错误:无法加载,因为ERR_FILE_NOT_FOUND。

我在这里错过了什么?

提问于
用户回答回答于

目录名称应该是assets而不是android_assets

像这样做:

如上图所示,只需右键单击你的应用程序 - >新建 - >文件夹 - >资产文件夹

现在把你的.html文件放在assets文件夹中。

而已。完成。

剩下的代码与你所做的一样。

WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///android_asset/hello.html");
setContentView(view);
用户回答回答于

我使用了许多带有不同applicationId的productFlavors。

如果我尝试从res / raw / file.html加载html文件,我得到一个ClassNotFoundException找不到类“product.flavor.package.R $ raw”

R.java文件具有不同的包名称。

它看起来像你不能从文件加载一个URL,如:webView.loadUrl(“file:///android_res/raw/page.html”); 因为WebView尝试使用具有不同包名称的R.class文件。

我假设从文件中加载HTML文件的ERR_FILE_NOT_FOUND具有相同的问题,但您没有看到异常。(webView.loadUrl(“file:///android_assets/page.html”);)

有了这个小小的工作,我解决了我的问题:

try {
        AssetManager assetManager = context.getAssets();
        InputStream stream = assetManager.open("page.html");
        BufferedReader r = new BufferedReader(new InputStreamReader(stream));
        StringBuilder total = new StringBuilder();
        String line;
        while ((line = r.readLine()) != null) {
            total.append(line).append("\n");
        }
        webView.loadDataWithBaseURL(null, total.toString(), "text/html", "UTF-8", null);
    } catch (Exception xxx) {
        Log.e(TAG, "Load assets/page.html", xxx);
    }

我希望这有帮助。

扫码关注云+社区