2013-03-07 5 views
0

나는 웹보기 위해 다음과 같은 시나리오를 가지고안드로이드 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; 
    } 
} 

//이, 좋아

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 

아래 지점 3 로그 고양이

  1. 네트워크를 사용할 수 없습니다.이 코드를 실행했는데 webviewclient의 onReceivedError가 호출되었습니다.
  2. 네트워크 사용 가능 및 페이지로드가 시작되고 네트워크 연결이 끊어지면 onReceivedError가 호출됩니다.
  3. 그러나 시간의 일부 인스턴스 mWebView.loadUrl (URL)가 호출된다 (에뮬레이터 F8로 버튼을 분리 네트워크를 누른 후 1,2,3 카운트)가, webViewclient의 방법처럼 호출되는 아래

및 WebView는 빈 흰색 화면을 표시하고 onReceivedError는 호출되지 않습니다. 여기

이 코드를 잘못 무엇
  1. 로그 캣입니다.
  2. 왜 onReceivedError가 호출되지 않습니다. 가 호출되지 않는 경우, 어떻게
  3. 웹보기를 알 수있는 방법
  4. 이 anyting 마무리 작업을로드하지 않은이 상황을 처리하는 것이 확실히 페이지를 호출합니다

답변

0

시작하고 onReceivedError가 호출되기 때문에 페이지가 완료 : -

모든 링크의

- 클릭 (인터넷이 존재하지 않는 경우) 다음은
-on 활동을 시작하거나 웹보기가 처리되지 않은 모든 예외를

를 호출 할 때 처리 할 오류가 발생합니다 URL을 오버라이드 (override) onRecieved 오류 응답을 위해 http 상태

+0

을 확인해야합니다. 그러나 제가 검색 한 것처럼 WebView에서 상태를 확인할 수있는 방법이 있습니다. 그 방법/해결책은 없습니다. – Baba

+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

+0

지금은 onPageFinished (..)에서 인터넷 체크인을 추가하고 finishActivity를 호출했습니다. – Baba

관련 문제