Guardar matriz de bytes con SharedPreferences

Así que tengo una byte [] array que he creado en mi aplicación para Android. Quiero usar SharedPreferences de android para almacenarlo y recuperarlo de nuevo cuando inicie mi aplicación. Cómo puedo hacer eso ?

Puede guardar una matriz de bytes en SharedPreferences utilizando android.util.Base64.

Para ahorrar:

 String saveThis = Base64.encodeToString(array, Base64.DEFAULT); 

Para la carga:

 byte[] array = Base64.decode(stringFromSharedPrefs, Base64.DEFAULT); 

Usted podría intentar guardarlo tiene una String :

Storring la matriz:

 SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("myByteArray", Arrays.toString(array)); 

Recuperación de la matriz:

 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]); } } 

De hecho, amplía el tamaño de los datos cuando lo convierte en una cadena Base64.

El tamaño final de datos binarios codificados en Base64 es igual a 1,37 veces el tamaño de datos original + 814 bytes (para encabezados).

Es más rápido y eficiente de memoria guardar un byte [] en SharedPreferences usando Charsets.ISO_8859_1

 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(); } 
  • ISO_8859_1 Conserva sus datos (a diferencia de UTF-8 y UTF-16)
  • Si va a transferir estos bytes fuera de la aplicación, usando un JSON por ejemplo, entonces tendrá que convertir el byte [] a Base64 antes de serializarlos.
  • JSON no podrá entender los caracteres extraños que ISO_8859_1 utilizará.

SUGERENCIA : si desea ahorrar más espacio (en caso de que su gran ahorro byte []) comprima el byte [] antes de convertirlo a cualquier formato (ISO o Base64)

Cómo guardar una matriz en las preferencias compartidas:

 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(); } 

Carga de datos de matriz desde las preferencias compartidas:

 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)); } } 

Implementar y llamar a las dos funciones anteriores. Espero que el código anterior ayuda

  • ¿Contexto de la aplicación para SharedPreferences?
  • Array de cadenas en SharedPreferences
  • Guardar en SharedPreferences desde DialogPreference personalizado
  • Lectura de preferencias compartidas
  • Android SharedPreferences, cómo guardar una variable int simple
  • ¿Cuál es la diferencia entre commit () y apply () en Shared Preference
  • Android - Almacenamiento / recuperación de cadenas con preferencias compartidas
  • Las Preferencias compartidas se pierden después de cerrar el dispositivo o de matar la aplicación.
  • Cómo hacer que la aplicación vaya a otra página si no se ejecuta por primera vez
  • ¿Preferencias compartidas? Javax.crypto.BadPaddingException: bloque de pad corrompido sólo en algunos dispositivos
  • Cuál es la mejor manera de usar las preferencias compartidas entre las actividades
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.