2014-10-19 93 views
0

該呼叫就是我宣佈我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

回答

0

您使用偏好的所有活動之間共享。

PreferenceManager.getDefaultSharedPreferences(ctx); 

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

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


,如果你想獲得相關活動的喜好,你應該叫Context.getPreferences()雖這麼說。

0

您不應該實例化一個活動類並從那裏獲取上下文。事實上,你不應該實例化一個活動時期;您應該使用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