这是支持旧版本 Android 和处理新 API 的一种方法。它甚至可能更有效(存储更少的字节):
public static void putStringCollection(final Context context,final int prefKeyResId,final Collection<String> newValue)
{
final Editor editor=PreferenceManager.getDefaultSharedPreferences(context).edit();
final String key=context.getString(prefKeyResId);
if(newValue==null)
editor.remove(key).apply();
else editor.putString(key,new JSONArray(newValue).toString()).apply();
}
public static Set<String> getStringSet(final Context context,final int prefKeyResId)
{
final String key=context.getString(prefKeyResId);
final String str=PreferenceManager.getDefaultSharedPreferences(context).getString(key,null);
if(str==null)
return null;
try
{
final JSONArray jsonArray=new JSONArray(str);
final Set<String> result=new HashSet<>();
for(int i=0;i<jsonArray.length();++i)
result.add(jsonArray.getString(i));
return result;
}
catch(final JSONException e)
{
e.printStackTrace();
PreferenceManager.getDefaultSharedPreferences(context).edit().remove(key).apply();
}
return null;
}
注意:无论 API 是什么,都应该使用它,因为它不会真正转换为 Android 保存数据的新方式。