Java 调用GetDefaultSharedReference时出现NullPointerException

Java 调用GetDefaultSharedReference时出现NullPointerException,java,android,nullpointerexception,Java,Android,Nullpointerexception,这是我在ContactActivity类中声明的内容 final SharedPreferences exceptionPrefs = PreferenceManager.getDefaultSharedPreferences(this); exceptionPrefs.edit().putString("Exceptions", TextUtils.join(",", exceptions)).apply(); 在另一个不是活动的课堂上。它扩展了BroadcastReceiver,在尝试从S

这是我在ContactActivity类中声明的内容

final SharedPreferences exceptionPrefs = PreferenceManager.getDefaultSharedPreferences(this);
exceptionPrefs.edit().putString("Exceptions", TextUtils.join(",", exceptions)).apply();
在另一个不是活动的课堂上。它扩展了BroadcastReceiver,在尝试从SharedReference获取存储值时,我在onReceive中使用了它-

正是这一行抛出了一个NullPointerException

此外,我还必须添加onReceive包含另一个SharedReferences对象,该对象从我的MainActivity接收值

这是日志

10-19 15:49:03.628: E/AndroidRuntime(24226): FATAL EXCEPTION: main
10-19 15:49:03.628: E/AndroidRuntime(24226): java.lang.RuntimeException: Unable to start receiver com.scimet.admin.driveon.RejectCall: java.lang.NullPointerException
10-19 15:49:03.628: E/AndroidRuntime(24226):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2146)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at android.app.ActivityThread.access$1500(ActivityThread.java:127)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at android.os.Looper.loop(Looper.java:137)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at android.app.ActivityThread.main(ActivityThread.java:4441)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at java.lang.reflect.Method.invokeNative(Native Method)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at java.lang.reflect.Method.invoke(Method.java:511)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at dalvik.system.NativeStart.main(Native Method)
10-19 15:49:03.628: E/AndroidRuntime(24226): Caused by: java.lang.NullPointerException
10-19 15:49:03.628: E/AndroidRuntime(24226):    at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:371)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:366)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at com.scimet.admin.driveon.RejectCall.onReceive(RejectCall.java:36)
10-19 15:49:03.628: E/AndroidRuntime(24226):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:2139)
10-19 15:49:03.628: E/AndroidRuntime(24226):    ... 10 more

永远不要实例化活动类并从中获取上下文。事实上,你不应该实例化一个活动周期;您应该使用startActivity来处理活动生命周期


无论如何,您为什么要这样做,BroadcastReceive确实获得了一个提供给onReceive方法的上下文,难道您不能使用该上下文来检索您的SharedReference吗?

您使用的首选项在所有活动之间共享

PreferenceManager.getDefaultSharedPreferences(ctx);
如果ctx是MainActivity或ContactActivity,则上述选项将返回相同的首选项

所以基本上你可以用你现有的上下文从BroadcastReceiver调用它


也就是说,如果您想获得与活动相关的首选项,您应该调用Context.getPreferences。

这是一个MainActivity上下文,我也将它用于不同的SharedReferences对象。您应该使用“GetDefaultSharedReferences”获得相同的SharedReference。你能试着用我建议的方法看看是否有效吗?除非我误读了你的问题,否则它应该会起作用。我的意思是,我的onReceive方法有两个SharedReference对象。其中一个使用MainActivity上下文,我认为它作为参数传递给onReceive,因为MainActivity是启动器活动。另一个SharedReference提供了NullPointerException,用于从ContactActivity类接收数据。除了实例化ContactActivity并使用我在ContactActivityPlease中声明的getContext方法之外,我想不出任何其他方法可以在ContactActivity的上下文中给出,请在获取空指针后发布您正在做的事情。您如何使用exceptionPositionPrefs?新联系人活动。。。您不能在Android中创建活动。@S.D.在ContactActivity类的上下文中,我还应该如何传递活动?
PreferenceManager.getDefaultSharedPreferences(ctx);