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()minSdkVersionAPI レベル 11 で追加されました。ビルド ターゲット ([プロジェクト] > [プロパティ] > [Android] など) が API レベル 11 よりも低い値に設定されています。このメソッドは、11 以上に設定している場合にのみ使用してください。

于 2012-06-13T13:22:01.120 に答える
1

古いバージョンの 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 に関係なく使用する必要があります。

于 2014-12-07T00:37:18.027 に答える