2013-03-07 2 views
0

У меня есть следующий сценарий для WebViewAndroid 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 

Ok,

  1. Когда сеть недоступна. Я запускал этот код, вызывал вызов onReceivedError webviewclient,
  2. Если запущена сеть и загрузка страницы, а также отключить сеть, то также вызывается onReceivedError.
  3. Но есть некоторые экземпляры времени (отсчет 1,2,3 после нажатия кнопки и отключения сети с f8 на эмуляторе) mWebView.loadUrl (URL) вызывается, методы webViewclient ныряет называется, как показано ниже

и WebView отображает пустой белый экран, onReceivedError не вызывается. здесь LogCat

и

  1. Что не так с этим кодом.
  2. Почему onReceivedError не вызывается. Если это не дозвонились, как справиться с этой ситуацией
  3. Как знать WebView не загружен anyting и закончить Активность в

ответ

0

это, непременно страница начала и страница закончена, потому что onReceivedError будет вызван: -

-Щелкните какие-либо ссылки (если интернет нет), то следует переопределить URL сгенерирует ошибку, которую он будет обрабатывать
-он деятельности началась или когда WebView называется

для всех исключений, которые не обрабатываются 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

Смежные вопросы