【问题标题】:Loading html file to webview on android from assets folder using Android Studio使用Android Studio从assets文件夹将html文件加载到android上的webview
【发布时间】:2018-05-02 12:35:00
【问题描述】:

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

我在这里错过了什么?

【问题讨论】:

    标签: java android webview android-studio gradle


    【解决方案1】:

    目录名称应该是 assets 而不是 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);
    

    【讨论】:

    • 它可以在不启用 javascript 的情况下工作。而且奇怪的是,URL中的“android_asset”文件夹指的是项目中的“assets”文件夹。
    • 是的,它看起来不对,但对我来说是一样的,“android_asset”是指名为 assets 的文件夹。多么混乱!
    【解决方案2】:

    类似的问题:

    我使用了许多具有不同 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);
        }
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-04-24
        • 1970-01-01
        • 2011-08-04
        • 2018-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多