【问题标题】:Connectivity Receiver null pointer exception error连接接收器空指针异常错误
【发布时间】:2017-07-23 09:27:59
【问题描述】:

我正在制作一个使用改造从 API 获取数据的应用。所以我写了一个从 BrodcaseReceiver 扩展而来的连接接收器类来检查互联网连接和互联网连接的任何变化。

我得到的错误是

    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);
}}

MyApplication.java

    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;
}}

我知道这是一个 NullPointer 异常。

【问题讨论】:

  • 显然mInstancenull,因为从未使用过MyApplication ...阅读Application 类文档
  • onCreate 中的 MyApplication 是否曾被调用过?
  • OnCreate 被调用。是的

标签: java android exception nullpointerexception


【解决方案1】:

在您的广播接收器中,您需要初始化 application 类,例如:

 @Override
 public void onReceive(final Context context, Intent intent) {
   MyApplication mApplication = ((MyApplication)context.getApplicationContext());
 }

还要确保你在manifest中添加类名

【讨论】:

    【解决方案2】:

    您是否已将您的 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">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多