2015-10-25 240 views
1

我嘗試使用try和catch塊創建android一種方式來處理沒有互聯網連接或如果web服務器關閉。在日食IOException紅色下劃線。如果http://192.168.0.23/loc/index.php的加載失敗,則應該加載"file:///android_asset/myerrorpage.html"。我知道只嘗試和從PHP抓住,並已看過其他任何教程,但無法找到我的錯誤。嘗試和捕獲url連接錯誤

它顯示以下消息:爲IOException的

無法到達catch塊。此異常不會從try語句體拋出

我的代碼:

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_localy); 
    mWebView = (WebView) findViewById(R.id.webview); 
    // Brower niceties -- pinch/zoom, follow links in place 
    mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    mWebView.setWebViewClient(new GeoWebViewClient()); 
    // Below required for geolocation 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.getSettings().setGeolocationEnabled(true); 
    mWebView.setWebChromeClient(new GeoWebChromeClient());  
    // Load google.com 
    try { 
    mWebView.loadUrl("http://192.168.0.23/loc/index.php"); 
    } 
    catch (IOException e) { 
     mWebView.loadUrl("file:///android_asset/myerrorpage.html"); 

    } 
} 

回答

1

loadUrl不會引發IOException

公共無效使用loadURL(字符串URL)

負載t他給了URL。

參數
網址資源的URL加載

這就是爲什麼你不應該試圖捕獲IOException(你也只能望塵莫及可以由try塊的代碼中拋出異常)。

只需更換用一個語句整個try-catch塊:

mWebView.loadUrl("http://192.168.0.23/loc/index.php"); 

至於如何在URL的負載檢測錯誤,上面的鏈接包含此代碼示例:

webview.setWebViewClient(new WebViewClient() { 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
    } 
}); 
webview.loadUrl("http://developer.android.com/"); 

因此,將其調整到您的代碼:

mWebView.setWebViewClient(new WebViewClient() { 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    mWebView.loadUrl("file:///android_asset/myerrorpage.html"); 
    } 
}); 
mWebView.loadUrl("http://192.168.0.23/loc/index.php"); 

我沒有,雖然進行了測試。

+0

這工作,如果沒有互聯網連接可用,但在可用互聯網的情況下,webview只顯示index.php。如果index.php有一個重定向錯誤頁面顯示。 – Droidboyx

2

IOException的無法到達catch塊。

try { 
mWebView.loadUrl("http://192.168.0.23/loc/index.php"); 
} 
catch (Exception e) { 
    Log.d(e.getMessage()); //Get the Exception thrown. 
    mWebView.loadUrl("file:///android_asset/myerrorpage.html"); 

} 

你:這個異常從來沒有從try語句體

意味着,你把你的try代碼不會觸發任何IOException試圖把Exception e如下拋出會知道你得到了什麼異常。

+0

爲什麼你將我的答案沒有標記爲正確的,沒有工作? –

+0

我的答案不適合你嗎?我應該更新我的答案嗎? –