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

  • Predeterminado Preferencias compartidas me dan valores incorrectos en Service
  • Compartido prefrence almacenado valor no funciona con android onCreate ()
  • Modo seguro para cifrar / descifrar la preferencia compartida en Android
  • Android: el valor de la cadena no está entrando en Preferencias compartidas
  • Android - ¿Cómo usar SharedPreferences en la clase non-Activity?
  • Android: Obtener todas las entradas seleccionadas de MultiSelectListPreference (SharedPreferences)
  • Android SharedPreferences en Fragmento
  • Actualizaciones de Android en Play Store
  • SharedPreferences y PreferenceFragment
  • SharedPreferences problemas con la cadena "ISO-8859-1"?
  • ¿Cómo usar las Preferencias Compartidas en MVP sin Dagger y no hacer que Presenter dependa del contexto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.