NullPointerException异常在getDefaultSharedPreference

问题描述:

该呼叫就是我宣布我ContactActivity类NullPointerException异常在getDefaultSharedPreference

final SharedPreferences exceptionPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
exceptionPrefs.edit().putString("Exceptions", TextUtils.join(",", exceptions)).apply(); 

在不同的类(这是不是一种活动。它扩展BroadcastReceiver),就试图让存储的值从SharedPreference我使用这个内onReceive() -

SharedPreferences exceptionPositionPrefs = PreferenceManager.getDefaultSharedPreferences(new ContactActivity().getContext()); 

这很行抛出一个NullPointerException。

而且,我必须补充一点的onReceive包含另一个SharedPreferences对象,它从我的MainActivity接收值。

这里的logcat的。

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 
+0

'新的ContactActivity()'...你不*在Android中创建*活动。 – 2014-10-19 11:07:04

+0

@ S.D。在ContactActivity类的上下文中如何传递? – Slay 2014-10-19 11:13:18

您使用偏好的所有活动之间共享。

PreferenceManager.getDefaultSharedPreferences(ctx); 

以上将返回相同喜好的如果ctx是MainActivity或ContactActivity。

所以基本上你可以从BroadcastReceiver中调用它,以及你可用的上下文。


,如果你想获得相关活动的喜好,你应该叫Context.getPreferences()虽这么说。

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

为什么你这样做,无论如何,BroadcastReceiver确实获得提供给onReceive方法的上下文,难道你不能仅仅使用该上下文来检索你的SharedPreference吗?

+0

这是一个MainActivity上下文,我也在使用其他SharedPreferences对象。 – Slay 2014-10-19 11:01:23

+0

您应该使用'getDefaultSharedPreferences'获得相同的SharedPreference。你可以尝试使用我建议的方式,看看它是否有效?它应该工作,除非我以某种方式误读你的问题 – Hahn 2014-10-19 11:04:54

+0

我的意思是说,我的onReceive方法有两个SharedPreference对象。其中一个使用MainActivity上下文(我认为这是作为onReceive参数传递的,因为MainActivity是启动器活动)。另一个'SharedPreference'(这是什么给NullPointerException)用于从'ContactActivity'类接收数据。除了通过实例化并使用它在'ContactActivity'内声明的'getContext()'方法,我没有其他办法可以考虑,在'ContactActivity'的上下文中提供。 – Slay 2014-10-19 11:11:07