Stockez et récupérez un objet de classe dans une préférence partagée

Dans Android, pouvons-nous stocker un objet d'une classe dans une préférence partagée et récupérer l'objet plus tard?

Si c'est possible comment le faire? Si ce n'est pas possible, quelles sont les autres possibilités de le faire?

  • Téléavertisseur d'affichage Android avec indicateur de page
  • Lame de dague de Gradle: ignorez par paquet
  • Android: les images ListView visibles clignotent lors de l'ajout de données à ArrayAdapter
  • Liste repliable Item in navigation Tiroir
  • Explication de la méthode getPixels pour un Bitmap dans Android
  • Autorisation d'écrire sur la carte SD
  • Je sais que la sérialisation est une option, mais je recherche des possibilités en utilisant la préférence partagée.

  • RxJava + Rétrofit -> BaseObservable pour les appels API pour la gestion centralisée des réponses
  • Comment transmettre un nombre entier d'une activité à une autre?
  • Comment mettre à jour la vue de liste extensible lorsque les données de l'adaptateur changent
  • Manipuler l'article en cliquant longuement sur la vue du recycleur
  • Le libellé de la liste Html ne fonctionne pas dans la vue de texte Android. Que puis-je faire?
  • Définition launchMode = "singleTask" vs set activity launchMode = "singleTop"
  • 10 Solutions collect form web for “Stockez et récupérez un objet de classe dans une préférence partagée”

    Pas possible.

    Vous ne pouvez enregistrer que des valeurs simples dans SharedPrefences SharePreferences.Editor

    Quelle est la particularité de la classe que vous devez enregistrer?

    Oui, nous pouvons le faire en utilisant Gson

    Télécharger le code de travail de GitHub

    SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); 

    Pour enregistrer

     Editor prefsEditor = mPrefs.edit(); Gson gson = new Gson(); String json = gson.toJson(myObject); // myObject - instance of MyObject prefsEditor.putString("MyObject", json); prefsEditor.commit(); 

    Oublier

     Gson gson = new Gson(); String json = mPrefs.getString("MyObject", ""); MyObject obj = gson.fromJson(json, MyObject.class); 

    Mise à jour1

    La dernière version de GSON peut être téléchargée à partir de github.com/google/gson .

    Mise à jour2

    Si vous utilisez Gradle / Android Studio, build.gradle la section dépendances build.gradle

     compile 'com.google.code.gson:gson:2.6.2' 

    Nous pouvons utiliser Outputstream pour produire notre Objet dans la mémoire interne. Et convertir en chaîne puis enregistrer de préférence. Par exemple:

      mPrefs = getPreferences(MODE_PRIVATE); SharedPreferences.Editor ed = mPrefs.edit(); ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutput; try { objectOutput = new ObjectOutputStream(arrayOutputStream); objectOutput.writeObject(object); byte[] data = arrayOutputStream.toByteArray(); objectOutput.close(); arrayOutputStream.close(); ByteArrayOutputStream out = new ByteArrayOutputStream(); Base64OutputStream b64 = new Base64OutputStream(out, Base64.DEFAULT); b64.write(data); b64.close(); out.close(); ed.putString(key, new String(out.toByteArray())); ed.commit(); } catch (IOException e) { e.printStackTrace(); } 

    Lorsque nous devons extraire Object from Preference. Utilisez le code ci-dessous

      byte[] bytes = mPrefs.getString(indexName, "{}").getBytes(); if (bytes.length == 0) { return null; } ByteArrayInputStream byteArray = new ByteArrayInputStream(bytes); Base64InputStream base64InputStream = new Base64InputStream(byteArray, Base64.DEFAULT); ObjectInputStream in; in = new ObjectInputStream(base64InputStream); MyObject myObject = (MyObject) in.readObject(); 

    J'ai eu le même problème, voici ma solution:

    J'ai la classe MyClass et ArrayList <MyClass> que je souhaite enregistrer dans les préférences partagées. Au début, j'ai ajouté une méthode à MyClass qui la convertit en objet JSON:

     public JSONObject getJSONObject() { JSONObject obj = new JSONObject(); try { obj.put("id", this.id); obj.put("name", this.name); } catch (JSONException e) { e.printStackTrace(); } return obj; } 

    Ensuite, voici la méthode pour sauvegarder l'objet "ArrayList <MyClass> items":

     SharedPreferences mPrefs = context.getSharedPreferences("some_name", 0); SharedPreferences.Editor editor = mPrefs.edit(); Set<String> set= new HashSet<String>(); for (int i = 0; i < items.size(); i++) { set.add(items.get(i).getJSONObject().toString()); } editor.putStringSet("some_name", set); editor.commit(); 

    Et voici la méthode pour récupérer l'objet:

     public static ArrayList<MyClass> loadFromStorage() { SharedPreferences mPrefs = context.getSharedPreferences("some_name", 0); ArrayList<MyClass> items = new ArrayList<MyClass>(); Set<String> set = mPrefs.getStringSet("some_name", null); if (set != null) { for (String s : set) { try { JSONObject jsonObject = new JSONObject(s); Long id = jsonObject.getLong("id")); String name = jsonObject.getString("name"); MyClass myclass = new MyClass(id, name); items.add(myclass); } catch (JSONException e) { e.printStackTrace(); } } return items; } 

    Notez que StringSet dans les préférences partagées est disponible depuis API 11.

    Utilisation de Gson:

    Le magasin:

     Gson gson = new Gson; JSONObject jsonObject = response.getJSONObject(); String json = gson.toJson(jsonObject); getPrefs().setUserJson(json); 

    Récupérer:

     String json = getPrefs().getUserJson(); 

    Avez-vous besoin de récupérer l'objet même après la fermeture de l'application, ou juste pendant son fonctionnement?

    Vous pouvez l'enregistrer dans une base de données.
    Ou créez simplement une classe d'application personnalisée.

     public class MyApplication extends Application { private static Object mMyObject; // static getter & setter ... } <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application ... android:name=".MyApplication"> <activity ... /> ... </application> ... </manifest> 

    Et ensuite de toutes les activités:

     ((MyApplication) getApplication).getMyObject(); 

    Pas vraiment la meilleure façon, mais ça marche.

    Utilisation de cet objet -> TinyDB – Android-Shared-Preferences-Turbo est très simple. Vous pouvez enregistrer la plupart des objets couramment utilisés avec des tableaux, des nombres entiers, des listes de chaînes, etc.

    Il n'y a aucun moyen de stocker des objets dans SharedPreferences. Ce que j'ai fait, c'est créer une classe publique, mettre tous les paramètres dont j'ai besoin et créer des setters et getters, j'ai pu accéder à mes objets,

    Vous pouvez utiliser les préférences complexes Android – par la bibliothèque Felipe Silvestre pour stocker vos objets personnalisés. Fondamentalement, il utilise le mécanisme GSON pour stocker des objets.

    Pour enregistrer l'objet dans les préférences:

     User user = new User(); user.setName("Felipe"); user.setAge(22); user.setActive(true); ComplexPreferences complexPreferences = ComplexPreferences.getComplexPreferences( this, "mypref", MODE_PRIVATE); complexPreferences.putObject("user", user); complexPreferences.commit(); 

    Et pour le récupérer:

     ComplexPreferences complexPreferences = ComplexPreferences.getComplexPreferences(this, "mypref", MODE_PRIVATE); User user = complexPreferences.getObject("user", User.class); 

    Oui. Vous pouvez stocker et restaurer l'objet en utilisant Sharedpreference

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