【问题标题】:Avoid App crashing when catch Exception捕获异常时避免应用程序崩溃
【发布时间】:2015-01-06 23:44:33
【问题描述】:

我有一个从在线文件中读取行的互联网操作。它位于 try-catch 块中。当执行失败时(例如对于丢失的 Internet 连接),操作转到 catch 块并且应用程序崩溃。如何避免崩溃?

try {
        BufferedReader reader = new BufferedReader(new InputStreamReader((new URL(MegaMethods.url+params[0])).openStream()), 8192);
        String line;
        while ((line = reader.readLine()) != null) {
            count++;
        }
        reader.close();
    }
    catch (Exception e){
    // Here I want to do something to avoid app crash
    }

【问题讨论】:

  • 不会因为catch子句而崩溃。它可能会因为随后的代码行尝试根据服务器结果执行某些操作而崩溃。
  • @Prem 它会崩溃,因为如果我没有互联网,文件就会出现问题,它找不到文件或无法解析 URL,所以它会流到 catch。当我可以访问 catch 时,我可以避免应用崩溃吗?
  • 您希望应用在这种情况下做什么?
  • @ClearCode 你能提供堆栈跟踪吗?
  • @JamesB 我希望如果我的尝试操作没有成功,应用程序不会崩溃,我想避免崩溃

标签: java android android-asynctask crash try-catch


【解决方案1】:

在尝试获取文件之前,请尝试检查设备是否具有网络连接。如果没有找到网络,则避免该任务。

代码示例 - 调用此方法。如果返回true,则网络可用。

public boolean isNetworkAvailable() {
    boolean status=false;
    try{
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getNetworkInfo(0);
        if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) {
            status= true;
        }else {
            netInfo = cm.getNetworkInfo(1);
            if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED)
                status= true;
        }
    }catch(Exception e){
        e.printStackTrace();  
        return false;
    }
    return status;

    } 

另外,我同意你的观点,由于某种原因,应用程序可能会抛出异常并到达 Catch 块。但请注意,即使 catch 块为空,它也不会导致您的应用程序崩溃。

应用程序可能会因为 try catch 块之外的某些代码而崩溃。

【讨论】:

  • 谢谢,但我的应用可以在互联网上运行!我不想检查互联网,因为 AsyncTask 运行时可能会出现问题,不幸的是,从互联网加载时互联网可能会出现故障,所以我更喜欢在收到失败响应后做一些事情
  • @ClearCode,在这种情况下,您无需采取任何措施来避免应用程序在 catch 块中崩溃。希望这能解答您的疑问。
  • 现在我明白了,问题可能是由返回值引起的,我做了其他操作,所以如果“try”没有按照我想要的那样进行,它会导致应用程序崩溃。非常感谢!
  • @ClearCode,如果对您有帮助,请将其标记为答案并结束循环。
猜你喜欢
  • 2013-09-05
  • 2016-06-13
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多