Подтвердить что ты не робот

WebViewClient onReceivedError устарел, новая версия не обнаруживает всех ошибок

В Android SDK 23 onReceivedError(WebView view, int errorCode, String description, String failingUrl) устарел и заменен на onReceivedError(WebView view, WebResourceRequest request, WebResourceError error). Однако, если я поместил свой телефон в режим полета и загрузил URL-адрес моего WebView, вызывается только устаревшая версия метода.

onReceivedHttpError (WebView view, WebResourceRequest request, WebResourceResponse errorResponse) также не полезен, так как он обнаруживает ошибки выше 500, и я получаю код статуса 109.

Есть ли устаревший способ обнаружения того, что мой WebView не удалось загрузить?

4b9b3361

Ответ 1

Обратите внимание, что на мобильном устройстве, где вы тестируете, необходимо запустить Android Marshmallow (API 23). Даже если вы разработаете приложение на API 23 SDK, но затем запустите приложение на Android Lollipop, вы все равно получите "старый" onReceivedError, потому что это функция ОС, а не SDK.

Кроме того, "код ошибки 109" (я думаю, это net::ERR_ADDRESS_UNREACHABLE) не является кодом ошибки HTTP, это код ошибки Chrome. onReceivedHttpError вызывается только для ошибок, полученных с сервера через HTTP. Когда устройство находится в самолете, оно не может получить ответ от сервера.

Ответ 2

Вы также можете выполнить следующие действия:

@SuppressWarnings("deprecation")
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
    // Handle the error
}

@TargetApi(android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
    // Redirect to deprecated method, so you can use it in all SDK versions
    onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
}

Убедитесь, что вы импортируете android.annotation.TargetApi

Счастливое кодирование!