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

ffvjumwh  于 2023-05-01  发布在  Android
关注(0)|答案(4)|浏览(247)

我正在使用Android Studio/Gradle。
app\src\main\android_asset文件夹中有一个名为chart的文件。联系我们
我尝试将此文件加载到我的webview中,如下所示:

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

但我总是犯错误:无法加载,因为ERR_FILE_NOT_FOUND。
我错过了什么?

6tdlim6h

6tdlim6h1#

目录名应该是assets而不是android_assets
这样做:

如上面的图片所示,只需右键单击您的应用程序-〉新建-〉文件夹-〉资产文件夹
现在把你的**。html文件,位于assets**文件夹中。
就这样。搞定。
剩下的代码与您所做的相同。

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

eulz3vhy2#

类似问题:
我使用许多具有不同applicationId的productFlavors。
如果我试图从res/raw/file加载一个html文件。html我得到一个ClassNotFoundException没有找到class“产品。flavor.package.R$raw”
www.example. com 文件具有不同的包名称。
它看起来就像你不能从文件加载URL一样:webView.loadUrl(“file:///android_res/raw/page.html”);因为WebView尝试使用R.的类文件具有不同的包名。
我假设从资产加载html文件的ERR_FILE_NOT_FOUND也有同样的问题,但您看不到异常。(webView.loadUrl(“file:///android_assets/page.”);)
有了这个小工作,我解决了我的问题:

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);
    }

希望这能帮上忙。斯蒂芬

dgjrabp2

dgjrabp23#

Gugelhupf应答,但使用原始资源。
此解决方案的优势:你继续翻译!

WebView webView = findViewById(R.id.about_text);
try {
  InputStream inputStream = getResources().openRawResource(R.raw.about);
  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
  StringBuilder stringBuilder = new StringBuilder();
  String line;
  while ((line = bufferedReader.readLine()) != null) {
    stringBuilder.append(line).append("\n");
  }
  webView.loadDataWithBaseURL(null, stringBuilder.toString(), "text/html", "UTF-8", null);
} catch (IOException e) {
  e.printStackTrace();
}
hc2pp10m

hc2pp10m4#

从SDK 30开始,您还需要调用setAllowFileAccess(true)

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

相关问题