1

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

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

但我收到以下错误:

方法 getStringSet(String, HashSet) 未为 SharedPreferences 类型定义

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

4

3 回答 3

5

getStringSet 可从 API 级别 11 (Android 3 Honeycomb) 获得。

检查您在项目中定义的 Android 版本。

http://developer.android.com/reference/android/content/SharedPreferences.html#getStringSet(java.lang.String , java.util.Set)

于 2012-06-13T13:21:06.027 回答
2

getStringSet()在 API 级别 11 中添加。您的构建目标(例如,项目 > 属性 > Android)设置为低于 API 级别 11。请仅在您设置minSdkVersion为 11 或更高时使用此方法。

于 2012-06-13T13:22:01.120 回答
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 保存数据的新方式。

于 2014-12-07T00:37:18.027 回答