使用Android Studio将html文件从资产文件夹加载到Android上的webview

2022-09-01 16:34:59

我使用的是 Android Studio/Gradle。

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

我正在尝试将此文件加载到我的Web视图中,如下所示:

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

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

我在这里错过了什么?


答案 1

目录名称应为android_assets

这样做:enter image description here

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

现在,将您的.html文件放在资产文件夹中。

就是这样。做。

在代码中,剩余部分与您执行的操作相同。

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

答案 2

类似问题:

我使用许多具有不同应用程序Id的产品Flavors。

如果我尝试从 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);
    }

我希望这有帮助。斯蒂芬


推荐