Intereting Posts
GoogleSignInAccount getPhotoUrl () возвращает null Как хранить данные в базе данных sqlite с помощью jQuery-mobile dreamviewer cc с телефонной связью в android? Sdkmanager vs "android update sdk" для установки зависимостей Уточнение в row_id, возвращаемое выражением insert sqlite Android: Как изменить текст в поле EditText? В чем разница между Display.getRotation () и Display.getOrientation (), кроме того, что Display.getOrientation () устарел? Android DownloadManager: как я могу получить заголовки ответов? Различные контроллеры для целей телефона и планшета Как проверить доступность пространства на внешнем хранилище? Android-PhoneGap / WebView игнорирует метатеги просмотров? Используя ADT и менеджер SDK, присоедините исходный код Android для затмения Распознавание голоса не работает, когда голос находится под записью Сохранение учетных данных в приложении для Android Кнопка треугольной формы для андроидной активности Проблема с изображением, имеющим прозрачный фон в Android

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 } 

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