EDIT: J'ai travaillé sur ce projet il y a des années et, malheureusement, je ne peux pas vérifier si l'une des réponses fonctionne dans le scénario donné.
J'ai de la difficulté avec un WebView qui devrait montrer notre blog. Une fois initié, cela fonctionne très bien. L'utilisateur peut accéder à différents liens dans WebView. Pour revenir au blog, il existe un bouton en dehors de WebView qui devrait charger à nouveau le site du blog principal.
Le problème est que rien n'est chargé après le deuxième appel à loadUrl. Voici mon code:
private WebView wv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.blog);
wv = (WebView) findViewById(R.id.blog_webview);
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon {
MyLog.logDump("onPageStarted: " + url);
}
@Override
public void onPageFinished(WebView view, String url) {
MyLog.logDump("onPageFinished: " + url);
}
});
wv.loadUrl(Constants.BLOG_URL);
}
La fonction appelée par mon OnClickListener est la suivante:
public void reLoadUrl() {
wv.loadUrl(Constants.BLOG_URL);
}
Malgré le fait que les journaux dans onPageFinished et onPageStarted indiquent que mon wv.loadUrl est appelé et qu'il charge l'URL correcte, le contenu de la vue Web elle-même ne change pas. J'ai essayé d'effacer le cache, l'historique, la vue, essayé différents WebSettings, essayé d'utiliser webView.goBack () - pas de résultat. De plus, ces idées ne fonctionnent pas: Étrange problème de Webview goBack dans Android
Parfois, reLoadUrl affiche le résultat souhaité - mais une fois échoué, il ne peut plus fonctionner de nouveau. Des idées sur ce qui pourrait se passer? J'ai essayé de lire le code WebView mais je n'ai rien trouvé qui puisse m'aider.
La seule chose que je peux ajouter, c’est que nous utilisons des réseaux d’annonces qui dépendent fortement de webViews - j’ai essayé de les désactiver, mais je n’ai pas supprimé les bibliothèques, je ne suis donc pas sûr qu’elles ne soient pas coupables.
Des idées??
Utilisez exact dans la séquence ci-dessous.
wv.clearCache(true);
wv.clearView();
wv.reload();
wv.loadUrl("about:blank");
wv.loadData(Constants.BLOG_URL);
J'ai passé la dernière journée à travailler sur une application qui utilisait une WebView. J'ai eu quelques problèmes avec le chargement de données dans la WebView.
Je ne suis pas tout à fait sûr que cela fonctionnerait, mais peut-être remplacer ce code:
public void reLoadUrl() {
wv.loadUrl(Constants.BLOG_URL);
}
avec ce code:
public void reLoadUrl () {
wv.clearView();
wv.loadUrl(Constants.BLOG_URL);
}
peut-être que lorsque vous effacerez WebView, cela résoudra le problème
Je vous suggérerais d'essayer de recréer la WebView
chaque fois que vous l'utiliserez et de voir si cela fait une différence.
Commencez par enregistrer le contexte, les paramètres de présentation et le parent.
Context context = wb.getContext();
ViewGroup.LayoutParams lp = wv.getLayoutParams();
ViewGroup parent = (ViewGroup)wv.getParent();
Puis arrêtez le chargement et supprimez la vue de son parent.
wv.stopLoading();
parent.removeView(wv);
Puis recréez et rajoutez-le.
wv = new WebView(context);
parent.addView(wv, lp);
Il se peut que vous deviez restaurer d'autres propriétés, mais c'est l'idée générale.
J'ai eu le même problème, l'appel de resumeTimers () a résolu le problème pour moi ...
Il vous suffit de créer une méthode dans laquelle vous purgez une vue Web entière réinitialisée et appelez-la à partir de ReLoadUrl ().
void loadWebView() {
wv = (WebView) findViewById(R.id.blog_webview);
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon {
MyLog.logDump("onPageStarted: " + url);
}
@Override
public void onPageFinished(WebView view, String url) {
MyLog.logDump("onPageFinished: " + url);
}
});
wv.loadUrl(Constants.BLOG_URL);
}
public void reLoadUrl() {
loadWebView();
}
Essayez de définir un client WebChrome. La vue Web nécessite le support de WebChrome Clint pour fonctionner correctement dans certains cas.
wv.setWebChromeClient(new WebChromeClient());
@override
public void onFormResubmission(WebView view, Message dontResend, Message resend){
resend.sendToTarget();
}
Essayez de charger une page vierge avant:
wv.loadUrl("about:blank");
wv.clearHistory();
wv.clearView();
wv.loadUrl(Constants.BLOG_URL);
Edit: C’est un code que j’ai utilisé auparavant car j’ai eu des problèmes avec cela aussi, veuillez l’essayer.
Je suis confronté au même problème et je l’ai fait en suivant les étapes suivantes:
webView.clearCache(true);
webView.loadUrl("Url");
et j'ai eu l'URL multiple chargé avec succès.
J'étais nouveau sur Android, je ne suis pas sûr que ce soit bon ou mauvais, mais cela fonctionne pour moi.J'efface simplement la capture de la vue Web et détruis et recrée avant de recharger une autre URL.
mWebView.clearCache(true);
// destroy before reload new url
parentView.removeView(mWebView);
mWebView.clearHistory();
mWebView.destroy();
Bien que mWebView.destroy (); générer une erreur "Java.lang.Throwable: Erreur: WebView.destroy () appelé alors qu'il est toujours attaché!" et je le cherche mais n’obtiens aucune solution et beaucoup disent que cela n’affecte pas l’application jusqu’à présent (je ne sais toujours pas résoudre ce NB): j’utilise WebChromeClient).
Je faisais face au même problème. Je créais une nouvelle Webview à chaque fois. Commencez par détruire votre précédente vue Web avant d'en créer une nouvelle. J'espère que cela vous aidera !! Faites de votre visualisation Web une variable globale. Comme -
Webview w;
puis avant de créer une nouvelle vue Web, détruisez simplement la précédente
if(null != w)
{
//destroy the previous webview, before creating the new one
w.destroy();
}
w= new WebView(activity);
Appelez cette méthode dans onPause()
private void pauseWebView() {
try {
Class.forName("Android.webkit.WebView")
.getMethod("onPause", (Class[]) null)
.invoke(webview, (Object[]) null);
} catch(ClassNotFoundException cnfe) {
} catch(NoSuchMethodException nsme) {
} catch(InvocationTargetException ite) {
} catch (IllegalAccessException iae) {
}
}
Dans onCreate
, au lieu d'utiliser wv.loadUrl(Constants.BLOG_URL);
, utilisez simplement wv.loadDataWithBaseURL(baseUrl, readFileAsString("index.html") , mimeType, "UTF-8", null);
J'ai fait face au même problème et aucune des solutions ci-dessus n'a fonctionné pour moi. J'ai donc corrigé le problème en rechargeant WebView à l'aide de JavaScript comme suit:
webView.loadUrl( "javascript:window.location.reload( true )" );
De plus, JavaScript doit être activé pour WebView:
webView.getSettings().setJavaScriptEnabled(true);