He intentado usar onReceivedError dentro de shouldOverrideUrlLoading() y 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 es 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 pueden considerar este recurso pesado. Bueno, no pesado como son las aplicaciones de Facebook y Google+ de Android. Y no como son los servicios de Google. Francamente, no me importa usar un poco de esas aplicaciones de oxígeno. Me llaman un chico malo ...
lo que estoy tratando de hacer es asegurarse de que haga algo más en caso de error, super.onReceivedError (vista, errorCode, description, failingUrl); myWebView.LoadUrl ("www.someOtherSite.net"); pero no hace nada más que darme la página de error "No encontrado". –
¿podría pasar el código de su método onReceivedError? – androdevo
sería demasiado código para esta pequeña ventana. pero utilicé el ejemplo del código que mostraste arriba. –