studio - Android WebView onReceivedError()
webview android studio 2017 (3)
De acuerdo con la documentación y mi experiencia, debería funcionar bastante bien. Solo tiene que configurar su WebClient
con el método onReceivedError
en su WebView.
Aquí está el fragmento de algunas de mis antiguas aplicaciones de prueba:
WebView wv = (WebView) findViewById(R.id.webView);
wv.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.i("WEB_VIEW_TEST", "error code:" + errorCode);
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
Lo probé y funciona bastante bien. Verifique sus registros y vea qué tipo de error de código obtiene. Espero eso ayude.
¿Alguien sabe si hay una forma de interceptar una "página no encontrada" o un "error de página no cargada" en WebView?
De acuerdo con la documentación de Android, onReceivedError()
debería ser capaz de interceptar. pero lo probé en una aplicación que le di erróneamente la URL incorrecta, y no hizo nada.
Quiero que mi aplicación pueda dar mi propio mensaje de error personalizado si la URL no está disponible por algún motivo.
este es el código que no hizo nada:
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// custom error handling ... show and alert or toast or something
}
Debería usar esto después de que haya terminado la página
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error){
//Your code to do
Toast.makeText(getActivity(), "Your Internet Connection May not be active Or " + error , Toast.LENGTH_LONG).show();
}
He intentado usar onReceivedError tanto en shouldOverrideUrlLoading () como fuera de ese método pero en el WebViewClient. Incluso intenté afuera en la clase de Actividad principal. No estaba contento con los resultados inconsistentes. Así que decidí usar un método de prueba, isOnline () y llamar a eso antes de llamar a loadUrl ().
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getBaseContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo i = cm.getActiveNetworkInfo();
if ((i == null) || (!i.isConnected())) {
Toast toast = Toast.makeText(getBaseContext(),
"Error: No connection to Internet", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, 0);
toast.show();
return false;
}
return true;
}
Entonces este onReceivedError está en el WebViewClient pero fuera del método overloadurlthingy. Esto parece prevenir sistemáticamente las páginas de error estúpidas y sonrientes de Android.
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
if (view.canGoBack()) {
view.goBack();
}
Toast toast = Toast.makeText(getBaseContext(), description,
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, 0);
toast.show();
}
Algunas personas podrían considerar este recurso pesado. Bueno, no es tan pesado como están las aplicaciones de Android, Facebook y Google+. Y no como son los servicios de Google. Francamente, no me importa usar un poco de esas aplicaciones de oxígeno. Llamame chico malo ...