web-dev-qa-db-fra.com

Chargement du fichier HTML dans Webview sous Android à partir du dossier des actifs à l'aide d'Android Studio

J'utilise Android Studio/Gradle.

le dossier app\src\main\Android_asset contient le fichier chart.html ..

J'essaie de charger ce fichier sur ma vue Web comme ceci:

WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///Android_asset/chart.html");
setContentView(view);

Mais j'ai toujours le message d'erreur: impossible de charger car ERR_FILE_NOT_FOUND.

Qu'est-ce que j'oublie ici?

20
Badr Hari

Le nom du répertoire doit être assets not Android_assets  

Fait comme ça: enter image description here

Comme indiqué dans les images ci-dessus, cliquez avec le bouton droit de la souris sur votre application-> Nouveau-> Dossier-> Dossier Actifs  

Maintenant, placez votre fichier .html ici dans le dossier assets .

C'est tout. Terminé.

Rester est identique en code ce que vous avez fait.

WebView view = new WebView(this);
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl("file:///Android_asset/hello.html");
setContentView(view);
45
Rustam

Problème similaire:

J'utilise beaucoup de productFlavors avec différentes applicationId.

Si je tente de charger un fichier html à partir de res/raw/file.html, je reçois un ClassNotFoundException Je n'ai pas trouvé la classe "product.flavor.package.R $ raw"

Le fichier R.Java a un nom de package différent.

On dirait que vous ne pouvez pas charger une URL depuis un fichier du type: WebView.loadUrl ("file: ///Android_res/raw/page.html"); parce que WebView essaye d’utiliser le fichier R.class avec un nom de paquet différent.

Je suppose que le problème posé par ERR_FILE_NOT_FOUND lors du chargement d'un fichier html à partir d'actifs est identique, mais vous ne voyez pas l'exception .

Avec ce petit travail, je résous mon problème:

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

J'espère que cela aide . Stephan

9
Gugelhupf

Réponse de Gugelhupf mais avec une ressource brute.
L'avantage de cette solution: la traduction continue de fonctionner!

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