Я попытался использовать onReceivedError как внутри shouldOverrideUrlLoading (), так и вне этого метода, но в WebViewClient. Я даже пробовал на улице в основном классе деятельности. Я не был доволен противоречивыми результатами. Поэтому я остановился на использовании тестового метода isOnline () и его вызове до вызова 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;
}
Тогда это onReceivedError находится в WebViewClient, но за пределами метода overloadurlthingy. Похоже, что это последовательно предотвращает глупые страницы с ухмыляющимися сообщениями об ошибках 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();
}
Некоторые люди могут посчитать этот ресурс слишком тяжелым. Ну, не так тяжело, как в приложениях для Facebook и Google+. И не так, как сервисы Google. Честно говоря, я не против использования кислорода из этих приложений. Назови меня плохим парнем ...