如何使用Android WebView处理“内部服务器错误”?

如何使用Android WebView处理“内部服务器错误”?,android,webview,internal-server-error,Android,Webview,Internal Server Error,我使用onReceivedError在加载webview时拦截任何错误。由于我们的网页有一个内部服务器错误,并且整个应用程序基于webview无本机导航,因此它将如下所示: 这样我就可以截获错误: @SuppressLint("NewApi") public void onReceivedError(final WebView view, WebResourceRequest request, final WebResourceError error) { Log

我使用onReceivedError在加载webview时拦截任何错误。由于我们的网页有一个内部服务器错误,并且整个应用程序基于webview无本机导航,因此它将如下所示:

这样我就可以截获错误:

    @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();
        }
    }
为什么应用程序无法识别此内部服务器错误?它可以识别是否没有互联网连接

但这个错误有点破坏了整个应用程序,因为即使网页重新上线,这个屏幕也不会消失。这意味着我必须将AppCacheEnabled设置为false

我猜这是因为它存储在缓存中,或者“重新加载”按钮不见了。但由于我们在共享主机上,因此无法向此html错误页面添加重新加载按钮

即使我完全关闭应用程序并再次启动,也会显示此错误

用户的唯一选择是卸载应用程序或手动删除缓存,但我认为没有人会这样做,或者在大多数情况下不知道这一点


所以我的问题是为什么onReceivedError甚至没有加载本地de_offline.html资产html页面?我是否必须在之前的某个时间点截取,以及截取的方法或位置?

检查错误页面是否没有使用HTTP 200状态代码响应。应使用HTTP-5xx状态代码响应服务器错误。 我怀疑WebView正在接收HTTP 2xx,并认为响应正常,因此不会发生错误处理

参考:

编辑: 我只是抬头看了看: 据我所见,这描述了一整套不同的错误。但是为什么呢

另一个编辑:哦,我的。。。搞什么鬼?! 就我所知,没有办法在网络视图中获取HTTP状态码?!这是我无法理解的。
我能得到的只是这个解决办法。对内部服务器错误进行调整(如果适用),使用Android SDK API级别23中的方法,其中添加了OnReceivedHttPeror。因此,500错误页面本身可能被解释为Android的有效无错误页面,因为它只是有效的html?这不是我的意思,错误页面可以作为常规页面使用。浏览器通过状态代码区分错误和常规。状态代码本身由服务器设置,服务器决定返回的HTML是常规HTML还是错误页面。在任何情况下,两者都应该是有效的HTML。