为什么共享偏好的getStringSet方法不起作用?

时间:2012-06-13 13:19:22

标签: android sharedpreferences

在我的Android应用程序中,我正在使用这行代码:

SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_PRIVATE);
Set<String> set = myPrefs.getStringSet("list", new HashSet<String>());

但是我收到了以下错误:

  

方法getStringSet(String,HashSet)未定义   输入SharedPreferences

为什么我收到此错误?提前谢谢。

3 个答案:

答案 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)

在API级别11中添加了

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保存数据的新方式。