2013-03-07 98 views
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 

好吧,

  1. 当网络不可用我跑这段代码,webviewclient的onReceivedError被调用,
  2. 如果网络可用和页面加载开始,并且网络断开,那么onReceivedError也会被调用。
  3. 但有时间的一些实例,mWebView.loadUrl(URL)被调用(与模拟器F8按下按钮,断开网络后数1,2,3),webViewclient的方法被调用像下面

和WebView显示空白屏幕,未调用onReceivedError。 这里是logcat的

  1. 什么不对这个代码。
  2. 为什么没有调用onReceivedError。如果它不被调用,如何处理这种情况
  3. 如何知道web视图没有加载点儿并完成活动

回答

0

它肯定会调用页开始,页结束,因为onReceivedError将在被称为: -

键并单击任何链接(如果网上不存在),那么应该重写URL会抛出它将处理
-on活动开始时或web视图被称为

对于不被处理的所有异常错误onRecieved错误你必须检查http状态

+0

感谢您的回复,但是有没有什么方法可以检查webView中的状态,至今我没有找到任何方法/解决方案。 – Baba 2013-03-08 10:48:33

+0

是啊,你必须检查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

+0

现在我已经在onPageFinished(..)中添加了Internet check并调用了finishActivity。 – Baba 2013-03-14 15:41:24