在我的Android应用程序中,我正在使用这行代码:
SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_PRIVATE);
Set<String> set = myPrefs.getStringSet("list", new HashSet<String>());
但是我收到了以下错误:
方法getStringSet(String,HashSet)未定义 输入SharedPreferences
为什么我收到此错误?提前谢谢。
答案 0 :(得分:5)
getStringSet可从API Level 11(Android 3 Honeycomb)获得。
检查您在项目中定义的Android版本。
http://developer.android.com/reference/android/content/SharedPreferences.html#getStringSet(java.lang.String,java.util.Set)
答案 1 :(得分:2)
getStringSet()
。您的构建目标(例如,项目&gt;属性&gt; Android)设置为低于API级别11的内容。如果您要设置{,请仅使用此方法{1}}至11或更高。
答案 2 :(得分:1)
这是支持旧版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保存数据的新方式。