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
您使用偏好的所有活动之间共享。
PreferenceManager.getDefaultSharedPreferences(ctx);
以上将返回相同喜好的如果ctx
是MainActivity或ContactActivity。
所以基本上你可以从BroadcastReceiver中调用它,以及你可用的上下文。
,如果你想获得相关活动的喜好,你应该叫Context.getPreferences()
虽这么说。
您不应该实例化一个活动类并从那里获取上下文。事实上,你不应该实例化一个活动时期;您应该使用startActivity来处理活动生命周期。
为什么你这样做,无论如何,BroadcastReceiver确实获得提供给onReceive方法的上下文,难道你不能仅仅使用该上下文来检索你的SharedPreference吗?
这是一个MainActivity上下文,我也在使用其他SharedPreferences对象。 – Slay 2014-10-19 11:01:23
您应该使用'getDefaultSharedPreferences'获得相同的SharedPreference。你可以尝试使用我建议的方式,看看它是否有效?它应该工作,除非我以某种方式误读你的问题 – Hahn 2014-10-19 11:04:54
我的意思是说,我的onReceive方法有两个SharedPreference对象。其中一个使用MainActivity上下文(我认为这是作为onReceive参数传递的,因为MainActivity是启动器活动)。另一个'SharedPreference'(这是什么给NullPointerException)用于从'ContactActivity'类接收数据。除了通过实例化并使用它在'ContactActivity'内声明的'getContext()'方法,我没有其他办法可以考虑,在'ContactActivity'的上下文中提供。 – Slay 2014-10-19 11:11:07
'新的ContactActivity()'...你不*在Android中创建*活动。 – 2014-10-19 11:07:04
@ S.D。在ContactActivity类的上下文中如何传递? – Slay 2014-10-19 11:13:18