以下是一種支持舊版本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的保存數據的新方式。
我正在檢查我的應用程序在HTC的野火,它有Android平臺2.2。及其使用的API級別8.我可以將我的API級別更改爲15並使用Android平臺2.2嗎?或者我必須選擇平臺4.0.3? – Piscean
@Piscean:無論您如何構建應用,您的Android 2.2設備上都不存在'getStringSet()'。 – CommonsWare
@Piscean如果你想使用,我已經爲你做了一個可能的解決方案。 –