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

我正在使用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。

我在这里想念的是什么?

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

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

如上图所示,只需右键单击您的app-> New-> Folder-> Assets Folder

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

而已。 完成。

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

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

类似的问题:

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

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

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

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

我假设从资产加载html文件的ERR_FILE_NOT_FOUND具有相同的问题但你没有看到exception。 (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); } 

我希望这有帮助。 斯蒂芬

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