【问题标题】:url connection error with try and catch使用 try 和 catch 的 url 连接错误
【发布时间】:2016-01-24 19:57:57
【问题描述】:

我尝试在 android 中使用 try 和 catch 块创建一种在没有互联网连接或网络服务器关闭的情况下进行处理的方法。在 Eclipse 中,IOException 带有红色下划线。如果http://192.168.0.23/loc/index.php 的加载失败,"file:///android_asset/myerrorpage.html" 应该会被加载。我只知道从 php 中尝试和捕获,实际上看过任何教程但找不到我的错误。

它显示以下消息:

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

    }
}

【问题讨论】:

    标签: java android web-applications webview try-catch


    【解决方案1】:

    IOException 无法到达的 catch 块。 try 语句体永远不会抛出这个异常

    意味着您在try 上放置的代码不会触发任何IOException 尝试将Exception e 放入如下:

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

    你会知道你得到了什么异常。

    【讨论】:

    • 为什么你没有将我的答案标记为正确,没有用?
    • 我的回答不适合你吗?我要更新我的答案吗?
    【解决方案2】:

    loadUrl 不会抛出 IOException

    public void loadUrl(字符串网址)

    加载给定的 URL。

    参数
    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");
    

    我还没有测试过。

    【讨论】:

    • 如果没有互联网连接可用,但在可用互联网的情况下,webview 仅显示 index.php。如果 index.php 有重定向,则会显示错误页面。
    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 2014-01-26
    • 2012-10-07
    • 2016-07-17
    • 2019-05-21
    • 2012-04-20
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多