古いバージョンの Android をサポートし、新しい API を処理する 1 つの方法を次に示します。さらに効率的かもしれません(保存するバイト数が少ない):
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;
}
注: これは、Android がデータを保存する新しい方法との間で実際に変換されないため、API に関係なく使用する必要があります。