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 } 

Solutions Collecting From Web of "Android WebView onReceivedError ()"

Согласно документации и моему опыту, она должна работать нормально. Вам просто нужно установить свой WebClient с помощью переопределенного метода 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); } }); 

Я тестировал его, и он работает нормально. Проверьте свои журналы и посмотрите, какая ошибка кода вы получаете. Надеюсь, поможет.

Я попытался использовать 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 сервисы. Я, честно говоря, не возражаю, используя немного кислорода. Назовите меня плохим парнем …

Вы должны использовать это после завершения страницы

  @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(); }