【问题标题】:SharedPreferences data not found未找到 SharedPreferences 数据
【发布时间】:2015-06-21 22:06:44
【问题描述】:

我一直试图让 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());

总结一下,我保存的数据没有显示出来。

【问题讨论】:

  • 调用getStringSet的时候是不是忘了把变量等同起来?

标签: java android


【解决方案1】:

根据文档(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());

来自文档: 请注意,您不得修改此调用返回的集合实例。如果您这样做,则无法保证存储数据的一致性,您也无法修改实例。

【讨论】:

  • 哦,这解释了很多。 Android提供的教程显示它的方式有点令人困惑。感谢您的帮助。
猜你喜欢
  • 2022-01-15
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
相关资源
最近更新 更多