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のためにロードできませんでした。
ここで何が欠けていますか?
ディレクトリ名は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);
同様の問題:
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);
}
これがお役に立てば幸いです。ステファン
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();
}