首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android WebView中获取HTTP状态码

在Android WebView中获取HTTP状态码
EN

Stack Overflow用户
提问于 2012-08-10 01:42:37
回答 8查看 33.4K关注 0票数 32

我正在开发一个在WebView中加载网站的安卓应用程序,但有时网站会返回HTTP500代码。

我的问题是:有没有办法从带有侦听器或其他类的WebView获取HTTP状态代码??

我试图实现一个WebViewClient,但我无法获得WebView收到的状态代码。

EN

回答 8

Stack Overflow用户

发布于 2012-08-24 01:14:41

这是不可能的(在我写这篇文章的时候)。onReceiveError()的文档充其量是模棱两可的,但是如果你看看这个问题,

http://code.google.com/p/android/issues/detail?id=968

很明显,HTTP状态码不会通过该机制报告。开发人员怎么可能在编写WebView时无法检索HTTP状态代码,这真的让我大吃一惊。

票数 17
EN

Stack Overflow用户

发布于 2012-12-22 00:41:51

您可以使用ajax加载内容,然后使用loadDataWithBaseURL将其放入webview。

创建一个网页,如下所示

代码语言:javascript
复制
<script type="text/javascript">
    function loadWithAjax() {
        var httpRequest = new XMLHttpRequest();
        var path = 'PATH';
        var host = 'HOST';
        var url = 'URL';

        httpRequest.onreadystatechange = function(){
            if (httpRequest.readyState === 4) { 
                if (httpRequest.status === 200) {
                    browserObject.onAjaxSuccess(host, url, httpRequest.responseText);
                } else {
                    browserObject.onAjaxError(host, url, httpRequest.status);
                }
            }
        };

        httpRequest.open('GET', path, true);
        httpRequest.send(null);
    }
</script>
<body onload="loadWithAjax()">

browserObject是注入到javascript中的java对象。

代码语言:javascript
复制
addJavascriptInterface(this, "browserObject");

并将其加载到webView。您应该将path/url替换为您的值。

代码语言:javascript
复制
ajaxHtml = IOUtils.toString(getContext().getAssets().open("web/ajax.html"));
            ajaxHtml = ajaxHtml.replace("PATH", path);
            ajaxHtml = ajaxHtml.replace("URL", url);
            ajaxHtml = ajaxHtml.replace("HOST", host);

loadDataWithBaseURL(host, ajaxHtmlFinal, "text/html", null, null);

然后像这样处理onAjaxSuccess/onAjaxError:

代码语言:javascript
复制
    public void onAjaxSuccess(final String host, final String url, final String html)
    {
        ((Activity) getContext()).runOnUiThread(new Runnable()
        {
            @Override
            public void run()
            {
                loadDataWithBaseURL(url, html, "text/html", null, null);
            }
        });
    }

    public void onAjaxError(final String host, final String url, final int errorCode)
    {

    }

现在你可以处理http错误了。

票数 14
EN

Stack Overflow用户

发布于 2020-02-25 23:22:36

您可以覆盖方法onReceivedHttpError,您可以在那里看到状态代码:

代码语言:javascript
复制
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
    super.onReceivedHttpError(view, request, errorResponse);
    int statusCode = errorResponse.getStatusCode();
    // TODO: dou your logic..
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11889020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档