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

时间:2015-02-16 20:02:38

标签: java android webview android-studio gradle

我正在使用Android Studio / Gradle。

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

我正在尝试将此文件加载到我的网页视图中:

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

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

我在这里缺少什么?

3 个答案:

答案 0 :(得分:45)

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

这样做:enter image description here

如上图所示,只需右键点击 app-> New-> Folder->资产文件夹

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

就是这样。完成。

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

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

答案 1 :(得分: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);
    }

我希望这会有所帮助。 斯蒂芬

答案 2 :(得分:0)

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