這只是我的應用程序的一個示例。單身共享首選項問題
我已經創建了一個單共享偏好,其使用自定義共享偏好管理器類來編輯共享偏好的數據值:
public class MySharedPrefManager {
private static MySharedPrefManager instance= null;
private static SharedPreferences SharedPref;
private static Editor SPEditor;
private MySharedPrefManager() {
}
public static MySharedPrefManager getInstance(){
if(instance==null)
instance= new MySharedPrefManager();
return instance;
}
public void setSharedPreferences(Context context){
SharedPref= context.getSharedPreferences("MySharedPref", Context.MODE_PRIVATE);
SPEditor= SPEditor.edit();
}
public void setAdmin(boolean pAdmin) {
SharedPrefManager.editBoolean("isAdmin", pAdmin, SPEditor);
}
public boolean isAdmin() {
return SharedPref.getBoolean("isAdmin", false);
}
}
共享偏好管理器:
public class SharedPrefManager {
public static void editString(String key, String value, Editor pEditor){
pEditor.putString(key, value);
pEditor.commit();
}
public static void editBoolean(String key, boolean value, Editor pEditor){
pEditor.putBoolean(key, value);
pEditor.commit();
}
我有大量的活動這就像活動:A-> B-> C-> D-> E-> F-> G
活動A,這是啓動活動,我得到MySharedPrefManager的實例和d設置SharedPreferences也:
public class ActivityA extends Activity{
private MySharedPrefManager myPref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.initialization);
myPref= MySharedPrefManager.getInstance();
// I am setting the SharedPreference Context with getApplicationContext(),
// as it is singleton, and I am using it through out my application
myPref.setSharedPreferences(getApplicationContext());
// other stuff...
}
private void changeData(){
myPref.setAdmin(true);
}
private void check(){
if(myPref.isAdmin()){
// do- something
}
}
}
ActivityD:
public class ActivityD extends Activity{
private MySharedPrefManager myPref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.initialization);
// Here i called only the instance not the setSharedPreferences.
myPref= MySharedPrefManager.getInstance();
// other stuff...
}
private void changeData(){
myPref.setAdmin(true);
}
private void check(){
if(myPref.isAdmin()){
// do- something
}
}
}
現在,我面對現在的問題是,有時我得到空指針異常的myPref.isAdmin()時我在活動A和D中稱之爲它,但大部分時間都適用。
我還需要在每個活動中設置SharedPreferences(調用setSharedPreferences()方法)嗎?我不覺得需要設置,因爲它是單身類。
我重複一遍,我使用getApplicationContext()設置SharedPreference Context,因爲它是單例,我通過應用程序使用它。
被修改:有3-4個共享首選項,我正在使用相同的結構..有類似的問題。 PreferenceManager.getDefaultSharedPreferences(context);使用這個PreferenceManager.getDefaultSharedPreferences(context);,我將只能使用一個SharedPreference,它是默認的SharedPreference。
嘗試'PreferenceManager.getDefaultSharedPreferences(context);' – Pr38y 2014-10-09 06:54:26