Android WebView onReceivedError()
Кто-нибудь знает, есть ли способ перехватить "страницу не найдена" или "ошибка загрузки страницы" в WebView?
В соответствии с документацией по Android, onReceivedError()
должен быть способен перехватить. но я тестировал его в приложении, которое я удалил неправильно, но ничего не сделал.
Я хочу, чтобы мое приложение могло предоставить свое собственное сообщение об ошибке, если URL-адрес когда-либо недоступен по какой-либо причине.
это код, который ничего не сделал:
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// custom error handling ... show and alert or toast or something
}
Ответы
Ответ 1
Согласно документации и моему опыту, она должна работать неплохо.
Вам просто нужно установить WebClient
с помощью метода override onReceivedError
в вашем WebView.
Вот фрагмент из моего старого тестового приложения:
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);
}
});
Я тестировал его, и он работает нормально. Проверьте свои журналы и посмотрите, какая ошибка кода вы получаете.
Надеюсь, что это поможет.
Ответ 2
Я попытался использовать onReceivedError как внутри shouldOverrideUrlLoading(), так и вне этого метода, но в WebViewClient. Я даже пробовал в основном классе Activity. Я был недоволен несогласованными результатами. Поэтому я решил использовать тестовый метод 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, но вне метода overloadurltingy. Это, похоже, постоянно предотвращает глупые, ухмыляющиеся страницы ошибок андроида.
@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();
}
Некоторые люди могут считать этот ресурс тяжелым. Ну, не так тяжело, как Android Android и Google+ приложения. И не Google сервисы. Я, честно говоря, не возражаю использовать немного кислорода. Назовите меня плохим парнем...
Ответ 3
Вы должны использовать это после завершения на странице
@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();
}