WebView loadUrl sólo funciona una vez

EDIT: He trabajado en este proyecto hace años y desafortunadamente no puedo verificar si alguna de las respuestas está funcionando en el escenario dado.

Estoy teniendo tiempo duro con un WebView que debe mostrar nuestro blog. Cuando initilized, trabaja apenas fino. El usuario puede navegar a diferentes enlaces dentro de WebView. Para volver al blog, hay un botón fuera de la WebView que debe cargar el sitio principal del blog de nuevo.

El problema es que nada se carga después de la segunda llamada a loadUrl. Aquí está mi código:

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 función llamada por mi OnClickListener es la siguiente:

  public void reLoadUrl() { wv.loadUrl(Constants.BLOG_URL); } 

Pero a pesar de que los registros en onPageFinished y onPageStarted muestran que mi wv.loadUrl está siendo invocado y que está cargando la url correcta, el contenido de la webview en sí no cambia. He intentado limpiar el caché, el historial, la vista, intentado WebSettings diferentes, trató de usar webView.goBack () – no resultado. También esas ideas no funcionan: Extraño webview goBack cuestión en android

A veces, el reLoadUrl muestra el resultado deseado – pero una vez que falla ya no se puede hacer que funcione de nuevo. ¿Alguna idea de lo que podría estar pasando? Traté de leer el código de WebView pero no pude encontrar nada que pudiera ayudarme.

Lo único que puedo agregar, es que estamos utilizando algunas redes de anuncios que dependen en gran medida de webViews – Traté de desactivarlas, pero no quité las bibliotecas, así que no estoy seguro de que no son el culpable.

¿¿Algunas ideas??

Utilice el exacto en la siguiente secuencia.

  wv.clearCache(true); wv.clearView(); wv.reload(); wv.loadUrl("about:blank"); wv.loadData(Constants.BLOG_URL); 

He pasado el último día trabajando en una aplicación que utiliza un WebView. Tenía algunos problemas con la carga de datos en el WebView.

No estoy completamente seguro de que esto funcionaría, pero tal vez reemplazar este código:

 public void reLoadUrl() { wv.loadUrl(Constants.BLOG_URL); 

}

Con este código:

Public void reLoadUrl () {

  wv.clearView(); wv.loadUrl(Constants.BLOG_URL); 

}

Tal vez cuando se borra el WebView que va a resolver el problema

Te sugiero que intentes recrear el WebView cada vez que lo uses y ver si eso hace alguna diferencia.

Primero guarde el contexto, el diseño de parms y el padre.

 Context context = wb.getContext(); ViewGroup.LayoutParams lp = wv.getLayoutParams(); ViewGroup parent = (ViewGroup)wv.getParent(); 

A continuación, detener la carga y quitar la vista de su padre.

 wv.stopLoading(); parent.removeView(wv); 

A continuación, vuelva a crear y agregue de nuevo.

 wv = new WebView(context); parent.addView(wv, lp); 

Que pueden ser otras propiedades que usted necesita para restaurar, pero esa es la idea general.

Intente cargar una página en blanco antes de:

 wv.loadUrl("about:blank"); wv.clearHistory(); wv.clearView(); wv.loadUrl(Constants.BLOG_URL); 

Editar: Este es un código que usé antes porque tenía problemas con esto también, por favor, inténtelo.

Intente configurar un cliente WebChrome. La webview necesita soporte de WebChrome Clint para funcionar correctamente en algunos casos.

 wv.setWebChromeClient(new WebChromeClient()); 

Sólo tienes que hacer un método en el que vas a vaciar un reiniciar todo WebView y lo llaman desde 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(); } 
 @override public void onFormResubmission(WebView view, Message dontResend, Message resend){ resend.sendToTarget(); } 

Estoy enfrentando el mismo problema y lo hice funcionar siguiendo los siguientes pasos:

 webView.clearCache(true); webView.loadUrl("Url"); 

Y conseguí la URL múltiple cargada con éxito.

Yo estaba enfrentando el mismo problema y, finalmente, capaz de gestionar para resolver esto. Soy nuevo en android no estoy seguro de esto bueno o malo, pero funciona para mí. Simplemente borrar captura de vista web y destruir y volver a crear antes de recargar otra url.

 mWebView.clearCache(true); // destroy before reload new url parentView.removeView(mWebView); mWebView.clearHistory(); mWebView.destroy(); 

Aunque mWebView.destroy (); Generar un error "java.lang.Throwable: Error: WebView.destroy () llamado mientras todavía está conectado!" Y lo busco pero no obtiene ninguna solución y muchos dicen que no afecta a la aplicación hasta ahora (todavía no sé resolver esto NB: uso WebChromeClient).

Tuve el mismo problema, llamando a resumeTimers () resuelto el problema para mí …

En onCreate , en lugar de usar wv.loadUrl(Constants.BLOG_URL); , Sólo utilice wv.loadDataWithBaseURL(baseUrl, readFileAsString("index.html") , mimeType, "UTF-8", null);

Yo estaba enfrentando el mismo problema. Estaba creando una nueva webview cada vez. Primero destruye tu anterior webView antes de crear uno nuevo. Espero que esta ayuda! Haz de tu webview una variable global. Me gusta –

Webview w;

Entonces antes de crear una nueva webview sólo destruir la anterior

  if(null != w) { //destroy the previous webview, before creating the new one w.destroy(); } w= new WebView(activity); 

Llame a este método en 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) { } } 

Me enfrenté al mismo problema y ninguna de las anteriores solución funcionó para mí. Así que lo arreglé mediante la recarga WebView utilizando JavaScript de la siguiente manera:

 webView.loadUrl( "javascript:window.location.reload( true )" ); 

También JavaScript debe estar habilitado para el WebView:

 webView.getSettings().setJavaScriptEnabled(true); 
  • Android JS en WebView.loadUrl ()
  • El bloqueo del sistema al reemplazar shouldInterceptRequest en WebViewClient
  • ¿WebViewClient y WebChromeClient se excluyen mutuamente?
  • Compruebe el método onReceivedSslError () de un WebViewClient si se firma un certificado desde una CA propia auto-firmada
  • Vista Web de Android
  • Obtener recursos de WebView que ya se ha descargado
  • WebViewClient que devuelve "No se pudo establecer una conexión segura." Al recrear el fragmento
  • Habilitación de protocolos SSL específicos con Android WebViewClient
  • Android: cómo interceptar un formulario POST en android WebViewClient en el nivel 4 de API
  • Android: comprueba si la solicitud es GET o POST
  • Android 4.4 dando ERR_CACHE_MISS error en onReceivedError para WebView volver
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.