【发布时间】:2014-10-09 06:50:07
【问题描述】:
这只是我的应用程序的一个示例。
我创建了一个单例共享首选项,它使用自定义共享首选项管理器类来编辑共享首选项数据值:
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
Activity A,即启动活动,我获取 MySharedPrefManager 的实例并设置 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
}
}
}
活动D:
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
}
}
}
现在,我现在面临的问题是,当我在 Activity A 和 D 中调用它时,有时我会在 myPref.isAdmin() 中得到 Null 指针异常。但大多数它的工作时间。
我还需要在每个活动中设置SharedPreferences(调用setSharedPreferences()方法)吗?我觉得不需要设置,因为它是单例类。 p>
重复一遍,我正在使用 getApplicationContext() 设置 SharedPreference 上下文,因为它是单例的,并且我在整个应用程序中都在使用它。
已编辑:我正在使用具有相同结构的 3-4 个共享首选项。有类似的问题。使用这个 PreferenceManager.getDefaultSharedPreferences(context);,我将只能使用一个 SharedPreference,它是默认的 SharedPreference。
【问题讨论】:
-
试试
PreferenceManager.getDefaultSharedPreferences(context);
标签: java android nullpointerexception singleton sharedpreferences