2017-03-03 143 views
-2

我正在製作一個應用程序,它使用改進從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; 
}} 

我知道這是一個空指針防爆ception。

+1

明顯'mInstance ''爲'null',因爲'MyApplication'永遠不會被使用......讀'Application'類文檔 – Selvin

+0

在''MyApplication''中的''onCreate''曾經被調用過嗎? – f1sh

+0

OnCreate被調用。是啊 –

回答

-1

您是否已將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"> 
0

在廣播接收機u需要初始化你application類,如:

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

同時確保ü添加類名manifest