40

私は疑問に思っていました、保存Enumするために使用されている一般的な方法は何SharedPreferecesですか?現在、gson列挙型を文字列に変換してからに保存するために使用していSharedPreferecesます。

    Gson gson = new Gson();
    // country is an enum.
    String json_country = gson.toJson(country);
    sharedPreferences.edit().putString(COUNTRY, json_country);

私は疑問に思っていました、これは良い方法ですか?より良い方法はありますか?

4

5 に答える 5

51

単純な String を使用してから、valueOf メソッドを使用して値を抽出できます。次に例を示します。

public enum MyEnum {
    ENUM1, ENUM2, ENUM3, ENUM4;

    public static MyEnum toMyEnum (String myEnumString) {
        try {
            return valueOf(myEnumString);
        } catch (Exception ex) {
                // For error cases
            return ENUM1;
        }
    }
}

public void setMyEnum(Context context, MyEnum myEnum) {
    SharedPreferences sp = context.getPreferences(this.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putString("MyEnum", myEnum.toString());
    editor.commit();
}

public MyEnum getMyEnum(Context context) {
    SharedPreferences sp = context.getPreferences(this.MODE_PRIVATE);
    String myEnumString = sp.getString("MyEnum", MyEnum.ENUM1.toString());
    return MyEnum.toMyEnum(myEnumString);
}

これがどのように機能するかを確認できるサンプルコードです。 https://github.com/jiahaoliuliu/SavingEnumToSharedPreferences

于 2013-08-14T13:09:05.587 に答える
13

列挙型を整数に関連付けて、単純な int を格納できます。これを見てください。

Int を Java の enum にキャストします(2 番目の回答) - 同じ方法で実行できますenumToInt

于 2013-02-07T12:12:05.710 に答える