Saving byte array using SharedPreferences

J'ai donc un ensemble d' byte [] array que j'ai créé dans mon application Android. Je souhaite utiliser SharedPreferences depuis Android pour le stocker et le récupérer à nouveau lorsque je démarre mon application. Comment puis je faire ça ?

  • Android: comment accéder au visualiseur en position (de l'extérieur de l'adaptateur)
  • Comment faire apparaître l'icône de lancement invisible / invisible dans Android?
  • Meilleures pratiques d'Eclipse Workspace
  • Écrire dans l'autorisation de fichier dans Android
  • Les types de chaîne d'erreur ne sont pas autorisés sur Android: configChanges dans le fichier manifeste
  • "R ne peut pas être résolu à une variable"?
  • Comment obtenir un uri d'une ressource d'image dans Android
  • Pourquoi onUpgrade () n'est-il pas invoqué sur la base de données Android sqlite?
  • Effectuez un changement de changement de bouton Android en cliquant sur XML
  • Existe-t-il un moyen d'avoir une seule et même instance de chaque activité?
  • Android EditText Fond transparent
  • Définissez un style personnalisé (thème) sur un composant de Switch Android
  • 4 Solutions collect form web for “Saving byte array using SharedPreferences”

    Vous pouvez enregistrer un tableau d'octets dans SharedPreferences en utilisant android.util.Base64.

    Pour économiser:

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

    Pour le chargement:

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

    Vous pouvez essayer de l'enregistrer a une String :

    Storring the array:

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

    Récupération du tableau:

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

    Vous augmentez réellement la taille d'une donnée lorsque vous l'avez converti en Base64 String.

    La taille finale des données binaires encodées Base64 est égale à 1,37 fois la taille de données d'origine + 814 octets (pour les en-têtes).

    Il est plus rapide et efficace de mémoire pour enregistrer un octet [] dans SharedPreferences à l'aide de 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 Préserve vos données (contrairement à UTF-8 et UTF-16)
    • Si vous souhaitez transférer ces octets en dehors de l'application, en utilisant un JSON par exemple, vous devrez convertir l'octet [] à Base64 avant de les sérialiser.
    • JSON ne sera pas en mesure de comprendre les caractères étranges que ISO_8859_1 utilisera.

    CONSEIL : si vous voulez économiser sur plus d'espace (dans le cas où vous sauvegardez un énorme octet []), comprimez l'octet [] avant de le convertir à n'importe quel format (ISO ou Base64)

    Enregistrement d'un tableau dans les préférences partagées:

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

    Chargement des données de base des préférences partagées:

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

    Implémentez et appelez les 2 fonctions ci-dessus. J'espère que le code ci-dessus vous aidera

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.