关于android广播包监听网络状态变化收到java.lang.NullPointerException: Error receiving broadcast Intent

来源:互联网 发布:头戴耳机推荐 知乎 编辑:程序博客网 时间:2024/06/10 11:54

在写一个广播包来监听网络状态改变时,在解锁手机时出现java.lang.NullPointerException的错误,错误显示为net_status这个TextView控件变成了空指针,但是不知道为什么变成了空指针,自己在onCreate函数里有通过net_status = (TextView) findViewById(R.id.connect);获得该控件了。


public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
ConnectivityManager connectMgr = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
if (connectMgr != null) {
NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mobNetInfo != null && wifiNetInfo != null) {
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
net_status.setText("NetWork Disabled");
} else {
net_status.setText("NetWork Enabled");
}
}
}
}

08-26 10:23:40.035: E/AndroidRuntime(10502): FATAL EXCEPTION: main
08-26 10:23:40.035: E/AndroidRuntime(10502): java.lang.RuntimeException: Unable to start receiver com.proxysystem.MainActivity$mNetworkStateReceiver: java.lang.NullPointerException
08-26 10:23:40.035: E/AndroidRuntime(10502): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2307)
08-26 10:23:40.035: E/AndroidRuntime(10502): at android.app.ActivityThread.access$1600(ActivityThread.java:131)
08-26 10:23:40.035: E/AndroidRuntime(10502): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)
08-26 10:23:40.035: E/AndroidRuntime(10502): at android.os.Handler.dispatchMessage(Handler.java:99)
08-26 10:23:40.035: E/AndroidRuntime(10502): at android.os.Looper.loop(Looper.java:137)
08-26 10:23:40.035: E/AndroidRuntime(10502): at android.app.ActivityThread.main(ActivityThread.java:4866)
08-26 10:23:40.035: E/AndroidRuntime(10502): at java.lang.reflect.Method.invokeNative(Native Method)
08-26 10:23:40.035: E/AndroidRuntime(10502): at java.lang.reflect.Method.invoke(Method.java:511)
08-26 10:23:40.035: E/AndroidRuntime(10502): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-26 10:23:40.035: E/AndroidRuntime(10502): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-26 10:23:40.035: E/AndroidRuntime(10502): at dalvik.system.NativeStart.main(Native Method)
08-26 10:23:40.035: E/AndroidRuntime(10502): Caused by: java.lang.NullPointerException
08-26 10:23:40.035: E/AndroidRuntime(10502): at com.proxysystem.MainActivity$mNetworkStateReceiver.onReceive(MainActivity.java:134)
08-26 10:23:40.035: E/AndroidRuntime(10502): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2300)
08-26 10:23:40.035: E/AndroidRuntime(10502): ... 10 more

经过调试,发现原来是在手机屏幕关掉时,手机会断掉网络(wifi), 当手机解锁之后,重新enable WIFI,此时app跑在背景里,没有调用OnCreate函数,此时net_status这个变量就变成了空指针,而此时调用net_status就会出现错误。所以应该在调用之前,判断net_status的值,确保它是非空指针。

public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
ConnectivityManager connectMgr = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
if (connectMgr != null) {
NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mobNetInfo != null && wifiNetInfo != null && net_status != null) {
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
net_status.setText("NetWork Disabled");
} else {
net_status.setText("NetWork Enabled");
}
}
}
}

0 0
原创粉丝点击