0
我有一个网页介面以下情形的Android的WebView是网络断开连接后空白
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view_tutorial);
mWebView = (WebView) findViewById(R.id.webView1);
mWebView.setWebViewClient(mWebViewClient);
mWebView.setInitialScale(0);
mWebView.setVerticalScrollBarEnabled(false);
mWebView.requestFocusFromTouch();
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
Button btnGo = (Button) findViewById(R.id.button1);
btnGo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String url = "http://www.google.com";// here goes my server url with https://...... for authentication
showProgressDialog("Loading");
mWebView.loadUrl(url);
}
});
}
private void showProgressDialog(String title) {
if(mProgress == null || !mProgress.isShowing()){
mProgress = ProgressDialog.show(this, title, "Please wait...", true,
true, new OnCancelListener() {
public void onCancel(DialogInterface pd) {
finishActivity();
}
});
mProgress.setCanceledOnTouchOutside(false);
mProgress.setCancelable(true);
}
}
private void finishActivity() {
if(mWebView!=null){
finish();
}
}
private final WebViewClient mWebViewClient = new WebViewClient() {
public void onPageStarted(WebView view, String url,
android.graphics.Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d("test", "page started");
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("test", "page should override called");
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
if (mIsLoadingSigninPage) {
mIsLoadingSigninPage = false;
dismissProgressDialog();
}
Log.d("test", "page finished");
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
mIsLoadingSigninPage = false;
dismissProgressDialog();
Log.d("test", "page error received");
super.onReceivedError(view, errorCode, description, failingUrl);
finishActivity();
}
};
private void dismissProgressDialog() {
if (mProgress != null && mProgress.isShowing()) {
mProgress.dismiss();
mProgress =null;
}
}
//这是3点日志猫低于
03-07 07:31:20.977: D/test(1431): page started
03-07 07:31:22.788: D/test(1431): page should override called
03-07 07:31:22.887: D/test(1431): page started
03-07 07:31:24.496: D/test(1431): page finished
好吧,
- 当网络不可用我跑这段代码,webviewclient的onReceivedError被调用,
- 如果网络可用和页面加载开始,并且网络断开,那么onReceivedError也会被调用。
- 但有时间的一些实例,mWebView.loadUrl(URL)被调用(与模拟器F8按下按钮,断开网络后数1,2,3),webViewclient的方法被调用像下面
和WebView显示空白屏幕,未调用onReceivedError。 这里是logcat的
和
- 什么不对这个代码。
- 为什么没有调用onReceivedError。如果它不被调用,如何处理这种情况
- 如何知道web视图没有加载点儿并完成活动
感谢您的回复,但是有没有什么方法可以检查webView中的状态,至今我没有找到任何方法/解决方案。 – Baba 2013-03-08 10:48:33
是啊,你必须检查HTTP状态,并参照本和阅读他们两个你会得到你的解决方案 http://en.wikipedia.org/wiki/List_of_HTTP_status_codes http://stackoverflow.com/questions/11889020/get-http-status-code-in-android-webview – maddy 2013-03-08 11:24:56
现在我已经在onPageFinished(..)中添加了Internet check并调用了finishActivity。 – Baba 2013-03-14 15:41:24