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 ?
- Cómo almacenar y recuperar (clave, valor) tipo de datos utilizando las preferencias guardadas android
- Agregar el botón favorito en la vista de lista
- Contexto de la aplicación SharedPreferences vs contexto de la actividad
- PreferenceManager.setDefaultValues readAgain parámetro y nuevas preferencias
- Android Menu sólo funciona una vez por ejecución de aplicación
- SharedPreferences strage. getSharedPreferences no funciona
- Almacenar objeto de lista de matrices en SharedPreferences
- Android Studio - Explorador de archivos de Android Device Monitor no funciona
- ¿Cuándo se aplicarán SharedPreferences () y commit ()?
- SharedPreferences putStringSet no funciona
- Cómo poner / obtener varios JSONObjects a JSONArray?
- Guardar el estado cuando se pulsa el botón Atrás
- Android se niega a escribir / crear archivos de preferencias compartidas
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
- Android: abrir un pdf de mi aplicación usando el visor de pdf
- Android cómo aplicar la máscara en ImageView?