0

SharedPreferences から整数値を文字列として、またはその逆に読み取る方法はありますか? json 値を整数として保存する場合と同様に、文字列として読み取ることができます。このようにして、TextView などで表示する必要があるときに、int を文字列に解析することを避けることができます。

4

2 に答える 2

0

SharedPreferencesは xml を使用してデータを保存し、xml ファイルは次のようになります。

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
  <int name="key1" value="0" />
  <boolean name="key2" value="true" />
  <string name="key3">example String</string>
 </map>

そのため、 Android は を使用しkeyて値を持つ xml ノードを見つけ、ノード タイプを使用してリクエストに対して値を検証します。ClassCastException一致しなかった場合はスローします。JSON では、そのような検証が存在しない場合、パーサーは値を解析しようとし、JSONException「org.json オブジェクトを使用している場合」をスローします。

ただし、JSON の動作を実現し、データを簡単に保存したい場合は、JSONObject でラップしてから String にシリアル化して保存できます。取得すると、JSONObject として再度解析し、そこから値を読み取ります。

于 2013-03-17T14:40:22.230 に答える
0

あなたのためにそれを行うヘルパークラスを書くことができます。例えば:

import android.content.Context;
import android.content.SharedPreferences;

/** Preferences (prefs) manager. */
public class Prefs
{
    public static final String MUSIC_KEY = "music_key";
    public static final String VOLUME_KEY = "volume_key";
    public static final String USER_ID_KEY = "user_id_key";
    public static final String FIRST_HELP_KEY = "first_help_key";
    public static final String SECOND_HELP_KEY = "second_help_key";
    public static final String CHALLENGE_HELP_KEY = "challenge_help_key";
    public static final String PREMIUM_KEY = "premium_key";
    public static final String GAMES_PLAYED_WHEN_STATS_SENT_KEY = "stats_games_played_key";

    private static final String FILENAME = "preferences";
    private static final SharedPreferences prefs = Const.context.getSharedPreferences(FILENAME, Context.MODE_PRIVATE);

    public static boolean getBoolean(String key, boolean defValue)
    {
        return prefs.getBoolean(key, defValue);
    }

    public static float getFloat(String key, float defValue)
    {
        return prefs.getFloat(key, defValue);
    }

    public static int getInt(String key, int defValue)
    {
        return prefs.getInt(key, defValue);
    }

    public static long getLong(String key, long defValue)
    {
        return prefs.getLong(key, defValue);
    }

    public static String getString(String key, String defValue)
    {
        return prefs.getString(key, defValue);
    }

    public static void putObject(String key, Object value)
    {
        final SharedPreferences.Editor editor = prefs.edit();
        if (value instanceof Boolean)
        {
            editor.putBoolean(key, (Boolean) value);
        }
        else if (value instanceof Float)
        {
            editor.putFloat(key, (Float) value);
        }
        else if (value instanceof Integer)
        {
            editor.putInt(key, (Integer) value);
        }
        else if (value instanceof Long)
        {
            editor.putLong(key, (Long) value);
        }
        else if (value instanceof String)
        {
            editor.putString(key, (String) value);
        }
        else
        {
            throw new IllegalArgumentException(value + " can't be inserted into SharedPreferences");
        }
        editor.commit();
    }

}

後で整数値を読み取りたい場合は、次のようにします。

final int lastSentGamesCounter = Prefs.getInt(Prefs.GAMES_PLAYED_WHEN_STATS_SENT_KEY, 0);

書き込み:

Prefs.putObject(Prefs.GAMES_PLAYED_WHEN_STATS_SENT_KEY, 10);
于 2013-03-17T14:46:05.087 に答える