2016-07-10 8 views
0

Я работал над андроидным приложением, и у меня есть веб-просмотр, который показывает некоторый веб-контент для пользователя.WebView занимает очень много времени, когда закрывает интернет-соединение во время загрузки страницы.

Теперь я пытаюсь выполнить некоторые тестовые примеры интеграции, чтобы убедиться, что все правильно.

Один из этих тестовых примеров - отключить интернет-соединение во время загрузки страницы и проверить поведение.

Это мой код:

 @Override 
    public void initializeWebViewCallbacks() { 
     if(!InternetHelper.isThereInternetConnection(AuthFragment.this.context())) 
     { 
      AuthFragment.this.showRetry(); 

} 
else{ 

      wv_auth.setWebViewClient(new WebViewClient()); 
      wv_auth.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); 
      wv_auth.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 

      if (Build.VERSION.SDK_INT >= 19) { 
       wv_auth.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
      } 
      else { 
       wv_auth.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
      } 

      wv_auth.loadUrl("http://myurl"); 

      wv_auth.setWebViewClient(new WebViewClient() { 

       @Override 
       public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { 
        super.onReceivedHttpError(view, request, errorResponse); 
        wv_auth.setVisibility(View.GONE); 
        AuthFragment.this.hideLoading(); 
        AuthFragment.this.showRetry(); 
       } 

       @Override 
       public void onPageStarted(WebView view, String url, Bitmap favicon) 
       { 
        super.onPageStarted(view, url, favicon); 
        AuthFragment.this.showLoading(); 
       } 


       @SuppressWarnings("deprecation") 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        view.loadUrl(url); 
        return true; 
       } 

       @TargetApi(android.os.Build.VERSION_CODES.M) 
       public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
        return shouldOverrideUrlLoading(view, request.toString()); 
       } 


       @Override 
       public void onPageFinished(WebView view, String url) { 
        super.onPageFinished(view, url); 
        AuthFragment.this.hideLoading(); 
        // some code 
         new Handler().postDelayed(new Runnable() { 
          public void run() { 
           ((BaseActivity)getActivity()).navigator.navigateToMainActivity(AuthFragment.this.getActivity(),false); 
          } 
         }, 200); 
        } 
       } 

       @SuppressWarnings("deprecation") 
       @Override 
       public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
        super.onReceivedError(view,errorCode,description,failingUrl); 
        // Handle the error 
        wv_auth.setVisibility(View.GONE); 
        AuthFragment.this.hideLoading(); 
        AuthFragment.this.showRetry(); 
       } 

       @TargetApi(android.os.Build.VERSION_CODES.M) 
       @Override 
       public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) { 
        // Redirect to deprecated method, so you can use it in all SDK versions 
        onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString()); 
       } 


      }); 
     } 

    } 

Когда я отключить подключение к Интернету во время Loding на другую страницу, прогресс круг все еще работает в течение примерно 30 минут и точку останова не пройти через onReceivedError (...), поэтому я не могу справиться с этим делом, любые предложения?

+0

см. "LoaderTask" :: http://stackoverflow.com/questions/22759978/android-timeout-webview-if-it-takes-longer-than-a-certain-time-to-load –

ответ

0

Я думаю, что это проблема с методом loadUrl (..).

Я пробую все возможные решения, а также следую всем решениям здесь: SO question, но без каких-либо шансов.

Я заметил, что когда вы создаете действие или фрагмент, на котором размещается веб-просмотр, все работает правильно, поэтому я сделал обходной путь, перейдя к другому промежуточному пустому действию в течение 1 секунды, а затем вернусь к этому действию, и этим я решаю вопрос.