web-dev-qa-db-ja.com

Android Android Studio

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のためにロードできませんでした。

ここで何が欠けていますか?

20
Badr Hari

ディレクトリ名はassetsではなくAndroid_assetsでなければなりません

次のようにします: enter image description here

上記の写真に示すように、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);
46
Rustam

同様の問題:

ApplicationIdが異なるproductFlavorsを多数使用しています。

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

これがお役に立てば幸いです。ステファン

9
Gugelhupf

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