在我的应用程序中,我必须从文件“下载”一个字符串,当用户禁用互联网并且使用 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();
}
日志猫
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)
我不想检查互联网连接,如果互联网操作无法正常工作,我想避免应用程序崩溃并执行某些操作
在发出这样的请求之前检查互联网连接
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 块。
对我来说,这是通过使用一般的 try 和 catch 来解决的。 意味着你必须使用
try {
// do something
} catch (Exception e) {
// e.printStackTrace();
}
而不仅仅是
catch (IOException e){
}