Android应用中的多个SharedPreferences

时间:2015-02-01 12:40:00

标签: android sharedpreferences

SharedPreferences pref = getSharedPreferences("user1", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("firstName", firstnameString);
editor.commit();

SharedPreferences pref = getSharedPreferences("user2", Context.MODE_PRIVATE);
...

我正在尝试使用上面的代码创建多个共享首选项,并尝试使用下面的代码访问所有共享首选项名称,即user1,user2等。

但即使创建了共享首选项,我在访问时也会收到NULLPointerException。

Map<String,?> allsharedpref = pref.getAll();
if(allsharedpref!=null){
    for(Map.Entry<String, ?> entry : allsharedpref.entrySet()){
    Toast.makeText(this, entry.getKey()+"\n", Toast.LENGTH_LONG).show();
}

2 个答案:

答案 0 :(得分:1)

从您创建的所有SharedPreferences中获取值。您需要从shared_prefs中读取文件名:

File prefsdir = new File(getApplicationInfo().dataDir,"shared_prefs");
String[] list = prefsdir.list();
String[] preflist = new String[list.length()];
for(int i=0;i<list.length(),i++){
  String preffile = list[i].substring(0, list[i].length()-4);
  preflist[i]=preffile;
}

现在使用preflist从所有SharedPreferences获取值:

for(int index=0;index<preflist.length(),index++){
  SharedPreferences spPref = getSharedPreferences(preflist[index], MODE_PRIVATE);
  Map<String,?> allsharedpref = spPref.getAll();
  if(allsharedpref!=null){
    for(Map.Entry<String, ?> entry : allsharedpref.entrySet()){
    Toast.makeText(this, entry.getKey()+"\n", Toast.LENGTH_LONG).show();
  }
}

答案 1 :(得分:0)

getSharedPreferences()只能在活动上调用onCreate()后调用。