我正在开发一个在WebView中加载网站的安卓应用程序,但有时网站会返回HTTP500代码。
我的问题是:有没有办法从带有侦听器或其他类的WebView获取HTTP状态代码??
我试图实现一个WebViewClient,但我无法获得WebView收到的状态代码。
发布于 2012-08-24 01:14:41
这是不可能的(在我写这篇文章的时候)。onReceiveError()的文档充其量是模棱两可的,但是如果你看看这个问题,
http://code.google.com/p/android/issues/detail?id=968
很明显,HTTP状态码不会通过该机制报告。开发人员怎么可能在编写WebView时无法检索HTTP状态代码,这真的让我大吃一惊。
发布于 2012-12-22 00:41:51
您可以使用ajax加载内容,然后使用loadDataWithBaseURL将其放入webview。
创建一个网页,如下所示
<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对象。
addJavascriptInterface(this, "browserObject");并将其加载到webView。您应该将path/url替换为您的值。
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:
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错误了。
发布于 2020-02-25 23:22:36
您可以覆盖方法onReceivedHttpError,您可以在那里看到状态代码:
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
int statusCode = errorResponse.getStatusCode();
// TODO: dou your logic..
}https://stackoverflow.com/questions/11889020
复制相似问题