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