我正在使用互联网连接。当我尝试下载数据,但没有互联网连接应用程序强制关闭。如果我希望应用程序不要抛出强制关闭消息,而是我自己的消息,例如“没有连接......”然后关闭活动,我需要做什么。谢谢!
我的logcat输出:
09-23 14:56:15.411: E/AndroidRuntime(20770): FATAL EXCEPTION: main
09-23 14:56:15.411: E/AndroidRuntime(20770): java.lang.RuntimeException: Unable to start activity ComponentInfo{lt.prasom/lt.prasom.GoodOffers}: java.lang.NullPointerException
09-23 14:56:15.411: E/AndroidRuntime(20770): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
09-23 14:56:15.411: E/AndroidRuntime(20770): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09-23 14:56:15.411: E/AndroidRuntime(20770): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-23 14:56:15.411: E/AndroidRuntime(20770): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09-23 14:56:15.411: E/AndroidRuntime(20770): at android.os.Handler.dispatchMessage(Handler.java:99)
09-23 14:56:15.411: E/AndroidRuntime(20770): at android.os.Looper.loop(Looper.java:130)
09-23 14:56:15.411: E/AndroidRuntime(20770): at android.app.ActivityThread.main(ActivityThread.java:3683)
09-23 14:56:15.411: E/AndroidRuntime(20770): at java.lang.reflect.Method.invokeNative(Native Method)
09-23 14:56:15.411: E/AndroidRuntime(20770): at java.lang.reflect.Method.invoke(Method.java:507)
09-23 14:56:15.411: E/AndroidRuntime(20770): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-23 14:56:15.411: E/AndroidRuntime(20770): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-23 14:56:15.411: E/AndroidRuntime(20770): at dalvik.system.NativeStart.main(Native Method)
09-23 14:56:15.411: E/AndroidRuntime(20770): Caused by: java.lang.NullPointerException
09-23 14:56:15.411: E/AndroidRuntime(20770): at java.io.StringReader.<init>(StringReader.java:46)
09-23 14:56:15.411: E/AndroidRuntime(20770): at lt.prasom.functions.XMLParser.getDomElement(XMLParser.java:73)
09-23 14:56:15.411: E/AndroidRuntime(20770): at lt.prasom.GoodOffers.onCreate(GoodOffers.java:68)
09-23 14:56:15.411: E/AndroidRuntime(20770): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-23 14:56:15.411: E/AndroidRuntime(20770): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
09-23 14:56:15.411: E/AndroidRuntime(20770): ... 11 more
答案 0 :(得分:3)
以下功能用于检测设备是否连接到网络。
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
您可以调用此功能,如下所示......
if(!isNetworkAvailable(context))
// Show Toast here...
else
//perform action ...
希望有所帮助......
答案 1 :(得分:0)
在建立网络连接之前,请检查网络连接是否可用。 请检查此Detect Internet Connection
如果网络连接可用,请继续进行处理,否则您可以使用Toast消息或AlertDialog向用户显示相应的消息。
如果您计划在互联网连接不可用时关闭活动,请显示Toast消息并调用finish()方法。 像这样:
if (noNetworkAvailable) {
Toast.makeText(getApplicationContext(), "No network available",
Toast.LENGTH_SHORT).show();
finish();
}
注意:由于finish()方法将关闭活动,因此使用Toast消息而不是AlertDialog,因为它会导致“android.view.WindowLeaked”异常。
答案 2 :(得分:0)
在清单中,您必须添加互联网权限:
<uses-permission android:name="android.permission.INTERNET" />