だから私はbyte [] array
私がAndroidアプリで作成したもの。AndroidからのSharedPreferencesを使用して、アプリを起動したときに保存して元に戻したい。どうやってやるの ?
String
が含まれている状態で保存してみてください:
配列の保存:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("myByteArray", Arrays.toString(array));
配列の取得:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
String stringArray = settings.getString("myByteArray", null);
if (stringArray != null) {
String[] split = stringArray.substring(1, stringArray.length()-1).split(", ");
byte[] array = new byte[split.length];
for (int i = 0; i < split.length; i++) {
array[i] = Byte.parseByte(split[i]);
}
}
Android.util.Base64を使用して、SharedPreferencesにバイト配列を保存できます。
保存する場合:
String saveThis = Base64.encodeToString(array, Base64.DEFAULT);
ロードの場合:
byte[] array = Base64.decode(stringFromSharedPrefs, Base64.DEFAULT);
実際に データのサイズを大きくする Base64文字列に変換するとき。
base64エンコードバイナリデータの最終サイズは、元のデータサイズの1.37倍+ 814バイト(ヘッダーの場合)です。
Charsets.ISO_8859_1 を使用してSharedPreferencesにbyte []を保存すると、より高速でメモリ効率が高くなります。
private static final String PREF_NAME = "SharedPreferences_Name";
private static final String DATA_NAME = "BytesData_Name";
public static byte[] getBytes(Context ctx) {
SharedPreferences prefs = ctx.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
String str = prefs.getString(DATA_NAME, null);
if (str != null) {
return str.getBytes(Charsets.ISO_8859_1);
}
return null;
}
public static void setBytes(Context ctx, byte[] bytes) {
SharedPreferences prefs = ctx.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor e = prefs.edit();
e.putString(DATA_NAME, new String(bytes, Charsets.ISO_8859_1));
e.commit();
}
[〜#〜] tip [〜#〜]:より多くのスペースを節約したい場合(巨大なバイト[]を保存する場合)任意の形式(ISOまたはBase64)に変換する前のbyte []
共有設定で配列を保存する:
public static boolean saveArray()
{
SharedPreferences sp = SharedPreferences.getDefaultSharedPreferences(this);
SharedPreferences.Editor mEdit1 = sp.edit();
mEdit1.putInt("Status_size", byteArr.size()); /* byteArr is an array */
for(int i=0;i<byteArr.size();i++)
{
mEdit1.remove("Status_" + i);
mEdit1.putString("Status_" + i, byteArr.get(i));
}
return mEdit1.commit();
}
共有設定から配列データをロードする:
public static void loadArray(Context mContext)
{
Shared Preferences mSharedPreference1 = PreferenceManager.getDefaultSharedPreferences(mContext);
byteArr.clear();
int size = mSharedPreference1.getInt("Status_size", 0);
for(int i=0;i<size;i++)
{
byteArr.add(mSharedPreference1.getString("Status_" + i, null));
}
}
上記の2つの関数を実装して呼び出します。上記のコードが役立つことを願っています
アリエル・ユストの答えに賛成することはできませんでしたが、完全に機能しました。
他の回答(Base64エンコーダーなど)は、私の最小APIバージョンでは使用できなかったか、元の値を保持していません(データの暗号化/復号化時に問題になる可能性があります)
さらに、kotlinで拡張機能を使用することをお勧めします。
val String.toPreservedByteArray: ByteArray
get() {
return this.toByteArray(Charsets.ISO_8859_1)
}
val ByteArray.toPreservedString: String
get() {
return String(this, Charsets.ISO_8859_1)
}
次に、単に文字列で呼び出します:
val string = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE).getString("string", "") ?: ""
val byteArray = string.toPreservedByteArray