Я использую onReceivedError
для перехвата любых ошибок при загрузке веб-просмотра. Поскольку наша веб-страница имеет Internal Server Error
, а все приложение основано на веб-просмотре (без встроенной навигации), оно будет выглядеть так:
Таким образом я перехватываю ошибки:
@SuppressLint("NewApi")
public void onReceivedError(final WebView view, WebResourceRequest request, final WebResourceError error) {
Log.d(TAG, "HTTP error " + error.getErrorCode() + " ---> " + error.getDescription());
int err = error.getErrorCode();
if (err == -2) {
view.loadUrl("about:blank");
view.loadUrl("file:///android_asset/de_offline.html");
} else {
view.reload();
}
}
Почему приложение не распознало этот Internal Server Error
? Он распознает, если нет подключения к Интернету.
Но эта ошибка как бы уничтожает все приложение, потому что этот экран не исчезнет, даже если веб-страница вернется в онлайн. Это означает, что я вынужден от setAppCacheEnabled
до false
.
Я предполагаю, что это потому, что он хранится в кеше или отсутствует кнопка перезагрузки. Но поскольку мы находимся на общем хостере, мы не можем добавить кнопку перезагрузки на эту страницу ошибки html.
Даже если я полностью закрою приложение и снова запущу его, эта ошибка будет отображаться.
Единственным вариантом для пользователя будет удаление приложения или удаление кеша вручную, но я не думаю, что кто-то сделает это или в большинстве случаев не знает об этом.
Итак, мой вопрос: почему onReceivedError
вместо этого даже не загрузил html-страницу локального актива de_offline.html
? Должен ли я перехватывать в какой-то момент раньше и какой метод или где это будет?