net error err_cache_miss android webview chromium webviewclient

error - android webview net:: err_cache_miss



Android 4.4 da error ERR_CACHE_MISS en onReceivedError para WebView de nuevo (4)

Este error en realidad proviene de fuera de su aplicación en la mayoría de los casos (en ocasiones es solo un permiso faltante de INTERNET , pero aquí no suena como el caso).

Estaba escribiendo una explicación, pero encontré un ejemplo mucho más directo que se duplica como una explicación en esta respuesta a otra pregunta . Aquí están los bits relevantes, replanteados un poco:

  1. Joe completa un formulario de pedido con la información de su tarjeta de crédito.
  2. El servidor procesa esa información y devuelve una página de confirmación / recibo marcada con no-cache en el encabezado, lo que significa que siempre se solicitará al servidor.
  3. Joe va a otra página.
  4. Joe vuelve a hacer clic porque quiere revisar dos veces, llevándolo a la página de confirmación.

El problema surge de ese último paso. La página de confirmación se marcó con no-cache , por lo que debe solicitarse nuevamente al servidor. Pero para mostrar la misma página correctamente, los mismos datos que se pasaron la primera vez deben enviarse de nuevo.

Esto hace que se facture dos veces a Joe, ya que se está realizando una nueva solicitud con la misma información que la última vez. Joe no se alegrará cuando encuentre dos cargos en su cuenta y un par de tiendas adicionales en la puerta de su casa.

Parece que esta situación era tan común que ahora es un error estándar en la mayoría de los navegadores y, aparentemente, en las versiones más recientes de Android. El error realmente se origina en Chromium, por lo que verá el mismo error en Google Chrome, y por eso solo lo verá en 4.4 (que introdujo una nueva versión de WebView basada en Chromium ).

De hecho, es probable que lo hayas visto antes, es el mensaje que aparece en la mayoría de los navegadores y te advierte algo como "Para actualizar esta página, el navegador tendrá que reenviar datos ... yada yada yada".

Esta es la manera de Android 4.4 de advertirte de lo que está pasando. La forma de solucionarlo realmente depende de a qué se está conectando, pero si busca esta situación, encontrará que es bastante común y tiene correcciones. El desencadenante exacto del error es en realidad cuando la solicitud no puede ser atendida desde la memoria caché (en este caso, no-cache está causando eso).

Dependiendo de la naturaleza de la solicitud, tal vez no-cache sea ​​necesario el no-cache .

Pero desde la perspectiva de su aplicación, el principal problema es que onReceiveError es una especie de "último recurso" para WebView. Los errores que llegas allí se han propagado desde el sistema subyacente. Y una vez que terminas ahí, no puedes continuar con la carga de la página tal como está . Por lo tanto, no tiene la oportunidad de permitir ese reenvío y no puede darle al usuario esa opción, a diferencia de Google Chrome.

Tengo una vista web en mi diseño. Por defecto, se abre un formulario de búsqueda en él. En la búsqueda, una sección de listado aparece debajo del formulario de búsqueda. Si se hace clic en algún enlace de la lista, se abrirá la página de detalles. Ahora quiero controlar la navegación hacia atrás para la vista web. Coloqué este código en la Actividad.

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.d("TYPE", TYPE); WebView myWebView = null; if (TYPE.equalsIgnoreCase("REPORT_ACTIVITY")) myWebView = reportView; if (TYPE.equalsIgnoreCase("FEEDBACK_ACTIVITY")) myWebView = feedbackView; if (myWebView != null) // Check if the key event was the Back button and if there''s history if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { myWebView.goBack(); return true; } // If it wasn''t the Back key or there''s no web page history, bubble up // to the default // system behavior (probably exit the activity) return super.onKeyDown(keyCode, event); } private WebViewClient webViewClient = new WebViewClient() { public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d("onPageStarted", "onPageStarted"); loadProgressBarBox.setVisibility(View.VISIBLE); //view.setVisibility(View.GONE); } public void onPageFinished(WebView view, String url) { Log.d("onPageFinished", "onPageFinished"); loadProgressBarBox.setVisibility(View.GONE); } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.d("Error", "Error code: " + errorCode + "/" + description); } }

También he establecido un WebViewClient con el WebView. Cuando vuelvo a usar el botón Atrás está funcionando bien para cualquier versión 4.4. Pero cuando estoy probando en Android 4.4, vuelve bien de la página de detalles a la página de listado. Pero tan pronto como estoy tratando de volver, su código de error de lanzamiento -1 y ERR_CACHE_MISS en la descripción. No se muestra ninguna página.

09-04 06:59:05.666: D/Error(1102): Error code: -1/net::ERR_CACHE_MISS

¿Cómo resolver este problema en Android 4.4?


Me encontré con el mismo problema porque en mi carpeta de manifiesto tenía el permiso de Internet en mayúscula:

Tuve (error)

<uses-permission android:name="ANDROID.PERMISSION.INTERNET"/>

Debería haber (sin error)

<uses-permission android:name="android.permission.INTERNET"/>


Utilizar

if (Build.VERSION.SDK_INT >= 19) { mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); }

Arreglará ERR_CACHE_MISS en el WebView. Tal vez deba cambiarlo a SDK_INT == 19 después de algunas actualizaciones de Lollipop WebView, pero funciona por ahora.


este permiso en su archivo andriodManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>