如何在SharePreferences中存储Set<Set<String>>?

3

我正在项目中使用 SharedPreference

我知道可以使用 prefs.putStringSet() 来存储一个 Set<String>。但是我的情况需要在 sharedPreference 中存储一个 Set<Set<String>>

我该如何实现这个需求?

2个回答

3

您可以使用GsonSet<Set<String>>转换为字符串,然后将其保存在sharepreference中,但是没有直接的方法可以在sharepreference中保存此类型。

Gson gson = new Gson();
    String jsonObject = gson.toJson(your_set_variable);

    editor.putString(KEY_PROJECTS, jsonObject );
    editor.commit();

更新:如果您需要使用谷歌的Gson库,请将其添加到您的gradle依赖项中。

compile 'com.google.code.gson:gson:2.8.0'

这个库能够帮助你把任何对象转换成字符串,然后将这个 JSON 字符串转换成你想要的类型。在 StackOverflow 和 Google 上有很多使用它的示例。

你能详细解释一下你的答案吗?详细的解释将会非常有帮助。 - sagar suri
好的,sharedPreference当然可以使用editor来存储int、float、String、boolean、long、StringSet等数据类型,这意味着除了这些类型之外,没有其他方法来存储任何其他类型。因此,如果您想保存一些像Set<Set<String>>或自定义对象这样的数据类型,除非您使用Google的Gson库将其转换为字符串,否则无法在shared preference中进行存储。我会更新我的答案,以便在您的项目中设置这些库。 - Mosa

0

使用SharedPreferences无法做到这一点,但是您可以将其保存到文件中。

FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(set);
os.close();
fos.close();

编辑:您可以像这样加载它。

FileInputStream fis = context.openFileInput(fileName);
ObjectInputStream is = new ObjectInputStream(fis);
Set<Set<String>> set = (Set) is.readObject();
is.close();
fis.close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接