防止Android WebView显示错误页面

4
我希望在接收到错误时能够显示来自本地资产的HTML。但是,即使我重写了onReceivedError方法,在从资产中获取页面之前,仍然会出现一个错误页面一闪而过。是否有解决此问题的修复或黑客方式?
以下是我的代码:
    @Override
    public void onReceivedError (WebView view, int errorCode, String description, String failingUrl)
    {
        Log.i("onReceivedError", "onReceivedError: " + failingUrl + " errorCode: " + errorCode);
        super.onReceivedError(view, errorCode, description, failingUrl);
        view.stopLoading();
        loadFromAsset(view, failingUrl);
    }

你心中有什么错误?onReceivedError 处理 HTTP 响应状态码。根据文档:向主机应用程序报告错误。...基本用法:..不启用 JavaScript 并忽略网页错误 - Boris Mocialov
我的意思是默认的Android“页面未找到”错误。你知道的 - 如果没有互联网连接,我想显示来自资产的页面而不是错误页面。 - Kuba
这是关于它的一些内容:http://code.google.com/p/android/issues/detail?id=968 - Boris Mocialov
错误不是HTTP错误,而是不可恢复的资源错误(文件未找到,无网络连接,主要资源未找到的服务器未找到等)。 - Boris Mocialov
你可以使用 HttpClient,并处理 HttpResponse.getStatusLine.getStatusCode - Boris Mocialov
显示剩余3条评论
1个回答

0
我能够通过在onPageStarted事件中检查是否有网络连接来绕过这个问题,目前在我们测试过的所有设备上似乎都可以正常工作。我使用的是自定义的HTML错误页面。
 mWebView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            if(!NetworkConnection.isNetworkAvailable(getActivity()) && !url.equals("file:///android_asset/error_page.html")){
                view.loadUrl("file:///android_asset/error_page.html");
            }
            super.onPageStarted(view, url, favicon);
        }

        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            mWebView.loadUrl("file:///android_asset/error_page.html");
            super.onReceivedError(view,errorCode,description,failingUrl);
        }

    });

在调用loadUrl()时,将其在作为参数接收的view上调用一次和在设置了setWebViewClientmWebView上调用一次有区别吗? - fpierrat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接