296 votes

Comment enregistrer/stocker des objets dans SharedPreferences sur Android ?

J'ai besoin d'obtenir des objets utilisateur à de nombreux endroits, qui contiennent de nombreux champs. Après la connexion, je souhaite enregistrer/stocker ces objets utilisateur. Comment mettre en œuvre ce genre de scénario ?

Je ne peux pas le stocker comme ceci :

 SharedPreferences.Editor prefsEditor = myPrefs.edit();
prefsEditor.putString("BusinessUnit", strBusinessUnit);

709voto

MuhammadAamirALi Points 2555

Vous pouvez utiliser gson.jar pour stocker des objets de classe dans SharedPreferences . Vous pouvez télécharger ce pot depuis google-gson

Ou ajoutez la dépendance GSON dans votre fichier Gradle :

 implementation 'com.google.code.gson:gson:2.8.5'

Création d'une préférence partagée :

 SharedPreferences  mPrefs = getPreferences(MODE_PRIVATE);

Sauver:

 MyObject myObject = new MyObject;
//set variables of 'myObject', etc.

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

À récupérer:

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

48voto

toobsco42 Points 613

Pour compléter la réponse de @MuhammadAamirALi, vous pouvez utiliser Gson pour enregistrer et récupérer une liste d'objets

Enregistrer la liste des objets définis par l'utilisateur dans SharedPreferences

 public static final String KEY_CONNECTIONS = "KEY_CONNECTIONS";
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();

User entity = new User();
// ... set entity fields

List<Connection> connections = entity.getConnections();
// convert java object to JSON format,
// and returned as JSON formatted string
String connectionsJSONString = new Gson().toJson(connections);
editor.putString(KEY_CONNECTIONS, connectionsJSONString);
editor.commit();

Obtenir la liste des objets définis par l'utilisateur à partir de SharedPreferences

 String connectionsJSONString = getPreferences(MODE_PRIVATE).getString(KEY_CONNECTIONS, null);
Type type = new TypeToken < List < Connection >> () {}.getType();
List < Connection > connections = new Gson().fromJson(connectionsJSONString, type);

6voto

Adil Soomro Points 18868

Mieux vaut créer une Constants pour enregistrer la clé ou les variables pour récupérer ou enregistrer des données.

Pour enregistrer les données, appelez cette méthode pour enregistrer les données de n'importe où.

 public static void saveData(Context con, String variable, String data)
{
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(con);
    prefs.edit().putString(variable, data).commit();
}

Utilisez-le pour obtenir des données.

 public static String getData(Context con, String variable, String defaultValue)
{
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(con);
    String data = prefs.getString(variable, defaultValue);
    return data;
}

et une méthode comme celle-ci fera l'affaire

 public static User getUserInfo(Context con)
{
    String id =  getData(con, Constants.USER_ID, null);
    String name =  getData(con, Constants.USER_NAME, null);
    if(id != null && name != null)
    {
            User user = new User(); //Hope you will have a user Object.
            user.setId(id);
            user.setName(name);
            //Here set other credentials.
            return user;
    }
    else
    return null;
}

5voto

Girish Patel Points 752

Essayez cette meilleure façon :

PreferenceConnector.java

 import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class PreferenceConnector {
    public static final String PREF_NAME = "ENUMERATOR_PREFERENCES";
    public static final String PREF_NAME_REMEMBER = "ENUMERATOR_REMEMBER";
    public static final int MODE = Context.MODE_PRIVATE;


    public static final String name = "name";


    public static void writeBoolean(Context context, String key, boolean value) {
        getEditor(context).putBoolean(key, value).commit();
    }

    public static boolean readBoolean(Context context, String key,
            boolean defValue) {
        return getPreferences(context).getBoolean(key, defValue);
    }

    public static void writeInteger(Context context, String key, int value) {
        getEditor(context).putInt(key, value).commit();

    }

    public static int readInteger(Context context, String key, int defValue) {
        return getPreferences(context).getInt(key, defValue);
    }

    public static void writeString(Context context, String key, String value) {
        getEditor(context).putString(key, value).commit();

    }

    public static String readString(Context context, String key, String defValue) {
        return getPreferences(context).getString(key, defValue);
    }

    public static void writeLong(Context context, String key, long value) {
        getEditor(context).putLong(key, value).commit();
    }

    public static long readLong(Context context, String key, long defValue) {
        return getPreferences(context).getLong(key, defValue);
    }

    public static SharedPreferences getPreferences(Context context) {
        return context.getSharedPreferences(PREF_NAME, MODE);
    }

    public static Editor getEditor(Context context) {
        return getPreferences(context).edit();
    }

}

Écrivez la valeur :

 PreferenceConnector.writeString(this, PreferenceConnector.name,"Girish");

Et obtenir la valeur en utilisant :

 String name= PreferenceConnector.readString(this, PreferenceConnector.name, "");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X