Подтвердить что ты не робот

Загрузка 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.

Что мне здесь не хватает?

4b9b3361

Ответ 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();
}