2016-03-29 17 views
2

Ich erstelle eine Anwendung, die WebView für den Zugriff auf eine Online-Website verwenden. Ich bin fest, wo ich Code hinzufügen muss, um die Verfügbarkeit der Seite zu überprüfen.Android Webview benutzerdefinierte Fehlerseite

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); 
} 

}

Ich versuche onReceivedError aber aus irgendeinem Grund benutzerdefinierte Seite hinzufügen wird nicht geladen.

/** 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"); 
} 

Bitte beraten, was zu tun ist.

+1

implementieren Ihre onRecievedError in setWEbChromeClient – Jois

+0

wenn ich so 'mWebView.setWebChromeClient setzen onReceiveError (neu WebChromeClient() { \t \t \t public void onReceivedError (WebView Ansicht, int Errorcode, String Beschreibung, String failingUrl) \t \t \t { \t \t \t mWebView.loadUrl ("file: ///android_asset/error.html"); \t \t \t} 'noch Standard-Fehler zu erhalten - die Homepage nicht verfügbar – Ivan

+0

ich setWebViewClient hinzugefügt und seine Arbeits :)' mWebView.setWebViewClient (neu WebViewClient() { \t \t \t @Override public void onReceivedError (WebView Ansicht, int errorcode, String Beschreibung, String failingUrl) { \t \t \t mWebView.loadUrl ("file: ///android_asset/greska.html"); \t \t \t}}); ' – Ivan

Antwort

6

Sie können loadErrorPage (Ansicht) Funktion in der onReceivedError Funktion aufrufen.

Der folgende Code lädt den Fehler, den Sie anzeigen müssen. Hier lade ich die HTML-Datei mit 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

Vor das, ich brauche Hilfe, wie man onReceivedError – Ivan

+1

hinzufügt dieser Code ----> mWebView.setWebViewClient (neuer WebViewClient() { @Override public void onReceivedError (WebView-Ansicht, int errorCode, String-Beschreibung, String failingUrl) { Log.i ("WEB_VIEW_TEST", "Fehlercode: "+ Fehlercode); loadErrorPage (anzeigen); } }); ======== Dies kann Ihnen helfen. –

+0

danke für Hilfe, ich habe meinen Code zu mWebView.setWebViewClient (neue WebViewClient() und es funktioniert jetzt – Ivan

0

Sie den folgenden Code verwenden können ..

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

Sie nicht die Frage bekommen ... –

2

i hinzugefügt onReceivedError zu mWebView.setWebViewClient (neu WebViewClient so jetzt es funktioniert. Vielen Dank für die Tipps.

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