我有一个WebView(webView),ProgressBar(进度)和RelativeLayout(错误)。我需要显示ProgressBar直到页面加载,并且需要在页面成功加载后显示WebView。如果有任何错误,它应该显示RelativeLayout(错误)。问题是如果没有网络连接,则会显示WebView。我如何使其工作?这是我的代码:
webView.setWebViewClient(new WebViewClient(){
@Override
public void onLoadResource(WebView view, String url) {
webView.setVisibility(View.GONE);
progress.setVisibility(View.VISIBLE);
error.setVisibility(View.GONE);
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
webView.setVisibility(View.VISIBLE);
progress.setVisibility(View.GONE);
error.setVisibility(View.GONE);
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError errorWebResource) {
webView.setVisibility(View.GONE);
progress.setVisibility(View.GONE);
error.setVisibility(View.VISIBLE);
super.onReceivedError(view, request, errorWebResource);
}
});
webView.loadUrl("https://www.google.com");
答案 0 :(得分:0)
一般而言,您希望在自定义代码之前执行超级调用,因此您可能希望从那里开始。 如果您不关心超级通话,则可能需要将其删除。
您可能想在onPageFinished中放置一个断点。我怀疑,当没有互联网连接时,你会得到这样的电话。
您的问题可能不在错误部分,但在执行webView.loadUrl()
;
我建议你查看这个已接受的答案:Detect whether there is an Internet connection available on Android。如果您不喜欢这个答案,那么在SO中如何检查网络连接还有其他数百个答案。< / p>
那么你的电话会是这样的:
if (isNetworkAvailable) {
webView.loadUrl("https://www.google.com");
} else {
error.setVisibility(View.VISIBLE);
}
这样,如果没有网络连接,它甚至不会尝试拨打电话。