2011-02-14 77 views
29

有誰知道是否有方法在WebView中攔截「未找到頁面」或「頁面未加載錯誤」?Android WebView onReceivedError()

根據android文檔,onReceivedError()應該可以攔截。但我在一個應用程序中進行了測試,我錯誤地給了錯誤的URL,但它沒有做任何事情。

我希望我的應用能夠給出我自己的自定義錯誤消息,如果URL由於任何原因而不可用。

這是根本不行的。代碼:

public void onReceivedError(WebView view, int errorCode, 
     String description, String failingUrl) { 

    // custom error handling ... show and alert or toast or something 
} 

回答

29

根據文檔和我的經驗,它應該工作相當精細。 您只需在WebView中將覆蓋方法onReceivedError設置爲WebClient即可。

這裏是我的一些舊的測試應用程序的代碼片段:

WebView wv = (WebView) findViewById(R.id.webView); 
wv.setWebViewClient(new WebViewClient() { 
    @Override 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      Log.i("WEB_VIEW_TEST", "error code:" + errorCode); 
      super.onReceivedError(view, errorCode, description, failingUrl); 
    } 
}); 

我測試過它和它的作品相當精細。檢查你的日誌,看看你得到什麼樣的代碼錯誤。 希望它有幫助。

+0

我想要做的是讓它做錯誤別的事情, super.onReceivedError(查看使用, errorCode,description,failingUrl); myWebView.LoadUrl(「www.someOtherSite.net」); 但它沒有做任何事情,但給我的「未找到」錯誤頁面。 – 2011-02-15 03:49:20

10

我已經嘗試在shouldOverrideUrlLoading()和該方法之外但在WebViewClient中使用onReceivedError。我甚至在主要的Activity類中嘗試過。我對結果不一致感到不滿。所以我決定使用測試方法isOnline(),並在調用loadUrl()之前調用它。

public boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) getBaseContext() 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo i = cm.getActiveNetworkInfo(); 
    if ((i == null) || (!i.isConnected())) { 
     Toast toast = Toast.makeText(getBaseContext(), 
       "Error: No connection to Internet", Toast.LENGTH_SHORT); 
     toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, 0); 
     toast.show(); 
     return false; 
    } 
    return true; 
} 

然後,這個onReceivedError在WebViewClient中,但在overloadurlthingy方法之外。這似乎始終防止愚蠢的,傻笑android錯誤頁面。

@Override 
    public void onReceivedError(WebView view, int errorCode, 
      String description, String failingUrl) { 
     if (view.canGoBack()) { 
      view.goBack(); 
     } 
     Toast toast = Toast.makeText(getBaseContext(), description, 
       Toast.LENGTH_SHORT); 
     toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, 0); 
     toast.show(); 
    } 

有些人可能會考慮這種資源沉重。那麼,Android Facebook和Google+應用的方式並不重要。而不是Google服務的方式。我坦率地說,不介意使用這些應用程序中的一小部分氧氣。叫我一個壞男孩...

1

你應該後頁面上完成

@Override 
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error){ 
      //Your code to do 
     Toast.makeText(getActivity(), "Your Internet Connection May not be active Or " + error , Toast.LENGTH_LONG).show(); 
    } 
相關問題