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

Bad*_*ari 20 java android webview gradle android-studio

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

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

我在这里错过了什么?

Rus*_*tam 47

目录名称应该是资产而不是android_assets

这样做: 在此输入图像描述

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

现在将您的.html文件放在assets文件夹中.

而已.完成.

您所做的代码中的剩余部分是相同的.

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

  • 它在不启用 javascript 的情况下工作。奇怪的是,URL 中的“android_asset”文件夹指的是项目中的“assets”文件夹。 (2认同)

Gug*_*upf 9

类似的问题:

我使用了许多带有不同applicationId的productFlavor.

如果我尝试从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);
    }
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.斯蒂芬