我一直在尝试让SharedPreferences正常工作,但是没有运气。我一直在检查进入保存状态的所有值,并且一切看起来都工作正常。但是,当我去检索已保存的数据时,找不到它。我尝试了几种不同的方法,包括getSharedPreferences(key,Context.MODE_PRIVATE)以获取首选项。我当前使用的方法是解决别人的答案的方法,而不是我的答案。
保存:
Log.i("MineStalker", "Saving");
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit();
Set<String> server_set = new HashSet<String>();
for (MinecraftServer server : servers) {
server_set.add(server.getDataString());
Log.i("MineStalker", "Save loop");
}
Log.i("MineStalker", "Save size: " + server_set.size());
editor.putStringSet("server_data", server_set);
editor.commit();
获得:
servers = new ArrayList<>();
Set<String> server_set = new HashSet<String>();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
preferences.getStringSet("server_data", server_set);
Log.i("MineStalker", "Create size: " + server_set.size());
总结起来,我要保存的数据没有显示出来。
最佳答案
根据文档(link),getStringSet返回数据,第二个参数是默认值,如果找不到该键的值,则返回默认值。这样的事情应该工作:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Set<String> server_set = preferences.getStringSet("server_data", new HashSet<String>());
Log.i("MineStalker", "Create size: " + server_set.size());
从文档:
请注意,您不得修改此调用返回的set实例。如果这样做,将无法保证存储数据的一致性,也无法保证修改实例的能力。