2016-03-29 4 views
2

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

public class SpartanWeb extends Activity { 

WebView mWebView; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Adds Progrss bar Support 
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS); 
    setContentView(R.layout.main); 

    // Makes Progress bar Visible 
    getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 
      Window.PROGRESS_VISIBILITY_ON); 

    // Get Web view 
    mWebView = (WebView) findViewById(R.id.webView1); 
    WebSettings websettings = mWebView.getSettings(); 
    websettings.setJavaScriptEnabled(true); 
    mWebView.stopLoading(); 
    mWebView.clearCache(true); 
    mWebView.loadUrl("http://google.com"); 
    mWebView.setHorizontalScrollBarEnabled(false); 
    mWebView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); 
    mWebView.setWebViewClient(new WebViewClient()); 
    mWebView.setDownloadListener(new DownloadListener() { 
     public void onDownloadStart(String url, String userAgent, 
       String contentDisposition, String mimetype, 
       long contentLength) { 
      Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent.setData(Uri.parse(url)); 
      startActivity(intent); 
     } 
    }); 

    // onProgressChanged 
    final Activity MyActivity = this; 
    mWebView.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 
      // bar disappear after URL is loaded, and changes string to 
      // Loading... 
      MyActivity.setTitle("Loading..."); 
      MyActivity.setProgress(progress * 100); // Make the bar 
                // disappear after URL 
                // is loaded 

      // Return the app name after finish loading 
      if (progress == 100) 
       MyActivity.setTitle(R.string.app_name); 
     } 
    }); 

}// EOM oc 

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
     mWebView.goBack(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

}

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

/** Called when the activity is first created. */ 
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
{ 
mWebView.loadUrl("file:///android_asset/error.html"); 
} 

Просьба сообщить, что делать.

+1

реализовать onRecievedError в setWEbChromeClient – Jois

+0

, если я поставил onReceiveError как этот 'mWebView.setWebChromeClient (новый WebChromeClient() { \t \t \t общественности недействительным onReceivedError (вид WebView, внутр ERRORCODE, описание String, String failingUrl) \t \t \t { \t \t \t mWebView.loadUrl ("file: ///android_asset/error.html"); \t \t \t} 'по-прежнему получать сообщение об ошибке по умолчанию - сайт не доступно – Ivan

+0

я добавил к setWebViewClient и его работы :)' mWebView.setWebViewClient (новый WebViewClient() { \t \t \t @Override общественности недействительным onReceivedError (вид WebView, INT ERRORCODE, описание String, String failingUrl) { \t \t \t mWebView.loadUrl ("файл: ///android_asset/greska.html"); \t \t \t}}); ' – Ivan

ответ

6

Вы можете вызвать функцию loadErrorPage (вид) в функции onReceivedError.

Следующий код загрузит содержимое ошибки, которое вам нужно показать. Здесь я загружаю html-файл с loadDataWithBaseURL.

public void loadErrorPage(WebView webview){ 
     if(webview!=null){ 

      String htmlData ="<html><body><div align=\"center\" >"This is the description for the load fail : "+description+"\nThe failed url is : "+failingUrl+"\n"</div></body>"; 

      webview.loadUrl("about:blank"); 
      webview.loadDataWithBaseURL(null,htmlData, "text/html", "UTF-8",null); 
      webview.invalidate(); 

     } 
    } 
+0

Перед что мне нужна помощь, как реализовать onReceivedError – Ivan

+1

add этот код ----> mWebView.setWebViewClient (новый WebViewClient() { @Override public void onReceivedError (представление WebView, int errorCode, String description, String failingUrl) { Log.i ("WEB_VIEW_TEST", "код ошибки: "+ errorCode); loadErrorPage (просмотреть); } }); ======== Это может вам помочь. –

+0

спасибо за помощь, я добавил свой код в mWebView.setWebViewClient (новый WebViewClient() и теперь работает – Ivan

0

Вы можете использовать следующий код ..

public class TestResultWebclient extends WebViewClient { 
     ProgressDialog progressDialog; 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      if (progressDialog == null) { 
       progressDialog = new ProgressDialog(TermsAndCondsMrupeeActivity.this); 
       progressDialog.setMessage("Loading..."); 
       progressDialog.show(); 
      } 
      super.onPageStarted(view, url, favicon); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      view.loadUrl(url); 
      return true; 

     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      if (progressDialog != null) 
       try { 

        if (progressDialog.isShowing()) { 
         progressDialog.dismiss(); 
         progressDialog = null; 
        } 

       } catch (Exception exception) { 
        exception.printStackTrace(); 
       } 
      super.onPageFinished(view, url); 

     } 
    } 
+1

Вы не понял вопрос ... –

2

я добавил onReceivedError к mWebView.setWebViewClient (новый WebViewClient, так что теперь он работает. Спасибо за советы.

mWebView.setWebViewClient(new WebViewClient() { 
     @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       mWebView.loadUrl("file:///android_asset/error.html"); 
     } });