Загрузка html файла в веб-обозреватель в 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.
Что мне здесь не хватает?
Ответы
Ответ 1
Имя каталога должно быть активы не android_assets
Сделайте так: ![enter image description here]()
Как показано на приведенных выше рисунках, просто щелкните правой кнопкой мыши на приложении- > Новая- > Папка- > Папка активов
Теперь разместите файл .html здесь, в папке assets.
Что это. Готово.
Оставшийся код тот же, что и вы.
WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///android_asset/hello.html");
setContentView(view);
Ответ 2
Аналогичная проблема:
Я использую много productFlavors с различными приложениями.
Если я пытаюсь загрузить html файл из res/raw/file.html, я получаю ClassNotFoundException. Не нашел класс "product.flavor.package.R $raw"
Файл R.java имеет другое имя пакета.
Похоже, вы не можете загрузить URL-адрес из файла:
webView.loadUrl( "файл:///android_res/raw/page.html" );
потому что WebView пытается использовать файл R.class с другим именем пакета.
Я предполагаю, что ERR_FILE_NOT_FOUND от загрузки html файла из активов имеет ту же проблему, но вы не видите исключения.
(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);
}
Надеюсь, это поможет.
Stephan
Ответ 3
Имя каталога должно быть android_assets/, а не android_asset/
Ответ 4
Ответ 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();
}