避免应用程序崩溃IOException或缺少互联网

时间:2015-01-06 21:49:49

标签: android android-asynctask crash connect ioexception

在我的应用中,我必须"下载"来自文件的字符串,当用户禁用互联网并且应用程序使用AsyncTask操作打开时,它会崩溃,因为互联网操作不起作用,并且错误在IOException catch中流动。我尝试在catch(IOException e)中进行操作,但它似乎不起作用,因为应用程序崩溃无论如何。如何避免我的应用程序崩溃?代码:

try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(new URL(MegaMethods.url + MegaMethods.BuildSelectedPath + "_Link.txt").openStream()));
        String line = reader.readLine();
        for (int k = 0; k < params[0] ; k++) {
            line = reader.readLine();
        }
        return line;
    }catch (IOException e){
        e.printStackTrace();
        Log.i("IOEXCEPTION", "");
        MegaMethods Errorr = new MegaMethods();
        Errorr.Back();
        Errorr.Error();
    }

Logcat

01-06 23:07:59.389  14512-14512/sparkyka.it.pcbuilds E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{sparkyka.it.pcbuilds/sparkyka.it.pcbuilds.Office}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
        at android.app.ActivityThread.access$1500(ActivityThread.java:117)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)

我不想检查互联网连接,如果互联网操作无法正常工作我想避免应用程序崩溃并做一些事情

2 个答案:

答案 0 :(得分:0)

在提出此类请求之前检查互联网连接

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
         = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null;
}

上面代码的一个缺点是,当你在wifi上,但wifi没有互联网连接;在这种情况下,它也会返回true。所以另一种选择就是这个

public static boolean isInternetAccessible(Context context) {
if (isNetworkAvailable()) {
    try {
        HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
        urlc.setRequestProperty("User-Agent", "Test");
        urlc.setRequestProperty("Connection", "close");
        urlc.setConnectTimeout(1500); 
        urlc.connect();
        return (urlc.getResponseCode() == 200);
    } catch (IOException e) {
        Log.e(LOG_TAG, "Couldn't check internet connection", e);
    }
} else {
    Log.d(LOG_TAG, "Internet not available!");
}
return false;
}

如果网络通话已在进行且互联网正在运行,则上述代码无法正常工作。您需要在代码中手动处理它。使用try-catch块。

答案 1 :(得分:0)

对我而言,通过使用一般尝试和捕获解决了。  意味着你必须使用

try { 

    // do something

} catch (Exception e) {

// e.printStackTrace();

}

而不仅仅是

    catch (IOException e){

}