Java 连接接收器空指针异常错误
我正在制作一个应用程序,它使用改型从API获取数据。因此,我编写了一个从BrodcaseReceiver扩展而来的connectivity receiver类,用于检查internet连接以及internet连接的任何更改 我得到的错误是Java 连接接收器空指针异常错误,java,android,exception,nullpointerexception,Java,Android,Exception,Nullpointerexception,我正在制作一个应用程序,它使用改型从API获取数据。因此,我编写了一个从BrodcaseReceiver扩展而来的connectivity receiver类,用于检查internet连接以及internet连接的任何更改 我得到的错误是 03-03 15:26:32.387 5547-5547/com.sriramr.movies E/AndroidRuntime: FATAL EXCEPTION: main
03-03 15:26:32.387 5547-5547/com.sriramr.movies E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.sriramr.movies, PID: 5547
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sriramr.movies/com.sriramr.movies.activity.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context com.sriramr.movies.MyApplication.getApplicationContext()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context com.sriramr.movies.MyApplication.getApplicationContext()' on a null object reference
at com.sriramr.movies.ConnectivityReceiver.isConnected(ConnectivityReceiver.java:33)
at com.sriramr.movies.activity.MainActivity.checkConnetion(MainActivity.java:64)
at com.sriramr.movies.activity.MainActivity.onCreate(MainActivity.java:52)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
ConnectivityReceiver.java
public class ConnectivityReceiver extends BroadcastReceiver {
public static ConnectivityReceiverListener connectivityReceiverListener;
public ConnectivityReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent arg1) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
if (connectivityReceiverListener != null) {
connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
}
}
public static boolean isConnected() {
ConnectivityManager cm = (ConnectivityManager) MyApplication.getInstance().getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
public interface ConnectivityReceiverListener {
void onNetworkConnectionChanged(boolean isConnected);
}}
public class MyApplication extends Application {
private static MyApplication mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized MyApplication getInstance() {
return mInstance;
}
public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) {
ConnectivityReceiver.connectivityReceiverListener = listener;
}}
MyApplication.java
public class ConnectivityReceiver extends BroadcastReceiver {
public static ConnectivityReceiverListener connectivityReceiverListener;
public ConnectivityReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent arg1) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
if (connectivityReceiverListener != null) {
connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
}
}
public static boolean isConnected() {
ConnectivityManager cm = (ConnectivityManager) MyApplication.getInstance().getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
public interface ConnectivityReceiverListener {
void onNetworkConnectionChanged(boolean isConnected);
}}
public class MyApplication extends Application {
private static MyApplication mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized MyApplication getInstance() {
return mInstance;
}
public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) {
ConnectivityReceiver.connectivityReceiverListener = listener;
}}
我知道这是一个空指针异常。您是否已将
MyApplication
类添加到AndroidManifest.xml
中?它应该是这样的:
<application
android:name="[PATH_TO_MyApplication]"
android:allowBackup="true"
android:icon="@drawable/icn_app"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
在您的广播接收器中,您需要初始化您的
应用程序
类,如:
@Override
public void onReceive(final Context context, Intent intent) {
MyApplication mApplication = ((MyApplication)context.getApplicationContext());
}
还要确保在
清单中添加类名
显然mInstance
为null
,因为MyApplication
从未使用过。。。在MyApplication
中读取Application
类文档onCreate
是否调用过?调用onCreate。是 啊