Chargement du fichier .html existant avec Android WebView

J’ai essayé des échantillons, des démos de codes Google et d’autres ressources avec WebView , mais quand j’essaie de le faire dans mon propre code, cela ne fonctionne pas pour moi.

Je veux charger myfile.html que j’ai mis dans le dossier de ressources et en utilisant:

 private WebView myWebView; myWebView.loadUrl("file:///android_assets/myfile.html"); 

Sur l’émulateur affiche une erreur

La page Web du file:///android_assets/myfile.html n’a pas pu être chargée comme file:///android_assets/myfile.html : Le fichier demandé n’a pas été trouvé. /android_assets/myfile.html

Lorsque je mets ce fichier en res/raw/ folder et en utilisant:

 myWebView.loadUrl("file:///android_res/raw/myfile.html"); 

alors seul émulateur Android 2.2 API niveau 8 peut charger le fichier probablement, d’autres versions plus anciennes montrent la même erreur. Est-ce que je manque quelque chose?

Existe-t-il un moyen de charger un fichier .html existant dans le package d’application qui fonctionne sur toutes les versions d’API?

ok, c’était ma très stupide erreur. Je poste la réponse ici juste au cas où quelqu’un aurait le même problème.

Le chemin correct pour les fichiers stockés dans le dossier assets est file:///android_asset/* (sans “s” pour le dossier assets que je pensais toujours avoir un “s”).

Et, mWebView.loadUrl("file:///android_asset/myfile.html"); fonctionne sous tous les niveaux API.

Je mWebView.loadUrl("file:///android_res/raw/myfile.html"); toujours pas à comprendre pourquoi mWebView.loadUrl("file:///android_res/raw/myfile.html"); fonctionne uniquement au niveau 8 de l’API. Mais cela n’a pas d’importance maintenant.

collez votre fichier .html dans le dossier assets de votre dossier de projet. et créez un fichier xml dans le dossier layout avec le code fol: my.xml:

  

append le code dans l’activité

 setContentView(R.layout.my); WebView mWebView = null; mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("file:///android_asset/new.html"); //new.html is html file name. 

Si votre structure doit être comme ça:

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

Il suffit ensuite de faire ( Android WebView: gestion des changements d’orientation )

  if(WebViewStateHolder.INSTANCE.getBundle() == null) { //this works only on single instance of webview, use a map with TAG if you need more webView.loadUrl("file:///android_asset/html/index.html"); } else { webView.restoreState(WebViewStateHolder.INSTANCE.getBundle()); } 

Assurez-vous d’append

  WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { webSettings.setAllowFileAccessFromFileURLs(true); webSettings.setAllowUniversalAccessFromFileURLs(true); } 

Ensuite, utilisez simplement les URL

    Zzzz   

Copiez et collez votre fichier .html dans le dossier assets de votre projet et ajoutez le code ci-dessous dans votre activité onCreate ().

  WebView view = new WebView(this); view.getSettings().setJavaScriptEnabled(true); view.loadUrl("file:///android_asset/**YOUR FILE NAME**.html"); view.setBackgroundColor(Color.TRANSPARENT); setContentView(view); 

Vous pouvez lire le fichier HTML manuellement, puis utiliser les méthodes loadData ou loadDataWithBaseUrl de WebView pour l’afficher.

La compilation de débogage est différente de celle de la version , alors:

Considérez votre structure de fichiers projet comme celle-ci [ ce cas si pour un assemblage de débogage ]:

 src | main debug | assets | index.html 

Vous devriez appeler index.html dans votre WebView comme:

 WebView web=(WebView)findViewById(R.id.web); web.loadUrl("file:///android_asset/index.html"); 

La disposition:

  

Donc, pour la sortie du assembly, cela devrait être comme:

 src | main release | assets | index.html 

Assurez-vous également de ne pas oublier: