Android - sauver l'Objet de SharedPreferences et obtenir n'importe où dans l'application
Dans mon application j'ai un custom User
classe qui détient une partie des données (nom, etc...). J'ai besoin pour économiser de l'objet et de l'obtenir n'importe où et n'importe quand dans les autres pages de l'application. J'ai fait une classe helper public final class GeneralMethods
avec beaucoup de méthodes que j'utilise beaucoup (statique, bien sûr).
Afin d'enregistrer les données en Im en utilisant Gson
de la bibliothèque. J'ai fait cette méthode:
public static void saveData(Context con, String variable, String data)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(con);
prefs.edit().putString(variable, data).apply();
}
Pour enregistrer un objet, j'utilise cette méthode comme suit:
Gson gson = new Gson();
String stringUser = gson.toJson(newUser);
GeneralMethods.saveData(VerificationActivity.this,"userObject",stringUser);
Pour charger les données en arrière, je suis en utilisant cette méthode statique:
public static String getData(Context con, String variable, String defaultValue)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(con);
String data = prefs.getString(variable, defaultValue);
return data;
}
Je n'ai pas vraiment savoir comment faire pour récupérer les données, c'est ce que j'ai fait jusqu'à présent:
Gson gson = new Gson();
String user="";
String value="";
user = GeneralMethods.getData(SplashScreenActivity.this,value,"userObject");
Im aux prises avec la getData
méthode, comment dois-je analyser les données de String
retour à la User
type?
MODIFIER
J'ai essayé les suggestions ci-dessous et je reçois toujours NULL
. Peut-être que je n'ai pas enregistrer l'objet dans le droit chemin?
EDIT2
Il semble Im ne génère pas l'objet correctement et, par conséquent, rien n'est enregistré. C'est l'utilisateur "Singleton" classe:
public class User implements Serializable {
private static User userInstance=null; //the only instance of the class
private static String userName; //userName = the short phone number
private User(){}
public static User getInstance(){
if(userInstance ==null){
userInstance = new User();
}
return userInstance;
}
public static User getUserInstance() {
return userInstance;
}
public String getUserName(){
return this.userName;
}
public static void setUserName(String userName) {
User.userName = userName;
}
public static void init(String _userName) {
User.setUserName(_userName);
}
}
C'est de cette façon que je peux configurer l'objet avec les données pertinentes (nom d'utilisateur comme paramètre du constructeur):
User.init(name);
C'est de cette façon-je convertir l'objet d'un String
:
Gson gson = new Gson();
String stringUser = gson.toJson(User.getInstance());
GeneralMethods.saveData(VerificationActivity.this,"userObject",stringUser);
OriginalL'auteur undroid | 2015-04-02
Vous devez vous connecter pour publier un commentaire.
Remplacer votre Utilisateur existant classe avec ci-dessous
Initialiser Nom D'Utilisateur
Convertir l'objet en une Chaîne
Oui, vous avez raison. J'ai mis à jour ma réponse.
Pourquoi a-t-elle à
implements Serializable
juste à enregistrer dans GSON?OriginalL'auteur Android Team
Je vous suggère d'utiliser l'Injection de Dépendance modèle.
J'ai l'habitude de créer
Preferences
classe qui expose les getters et les setters de rapidement lire et enregistrer les valeurs deSharedPreferences
.Je l'injection dans la même instance de
Preferences
n'importe où dans le code à l'aide de Poignard que la Dépendance de l'Injecteur.Pourquoi utiliser Singleton objet au-dessus de
public static
aides?Lire plus ici.
Exemple de
Preferences
classe:et comment l'utiliser dans
Activity
:OriginalL'auteur klimat
Vous avez juste besoin de remplacer une ligne de code
À
Avez-vous de la chaîne de la "Chaîne de stringUser = gson.la méthode toJson(newUser);" cette ligne j'ai vérifié votre code & fonctionne très bien.
Apparemment pas, je ne reçois que
{ }
. Probablement pas de la création de l'objet correctement. Im en utilisant un Singleton comme la baseUser
classe. Je vais mettre à jour ma question avec les données pertinentes.OriginalL'auteur Android Team
Nous pouvons le faire en utilisant Gson de la bibliothèque. Et partagé la préférence est accessible par le biais de l'application. J'ai créé ma propre classe pour l'accès partagé pref avec getter et setter de tous type String, Int, Objet, etc.
À utiliser Gson Bibliothèque, ci-Dessous est le code. Si vous souhaitez que la classe que j'ai créé, alors laissez-moi savoir
Vous pouvez utiliser gson.jar pour stocker des objets de la classe en SharedPreferences. Vous pouvez télécharger ce pot à partir d'ici https://code.google.com/p/google-gson/downloads/list
Ou ajouter GSON de la dépendance dans Gradle fichier
compiler 'com.google.code.gson:gson:2.5'
Pour Enregistrer
De Récupérer
Espère que cela vous aide
Summved
OriginalL'auteur Summved Jain
Pour l'obtention des données en arrière-
Espère que cela aide 🙂
OriginalL'auteur Ashish Tamrakar
Vous le faites correctement, mais je pense que vous avez inversé les deux champs de la méthode getData.
Vous avez cette méthode:
Mais vous sont en train d'envoyer cette:
Qui signifie que la variable est présente.la valeur et de votre valeur par défaut est "userObject". Je crois que vous voulez faire dans l'autre sens
OriginalL'auteur vonGohren
OriginalL'auteur John
Essayer cette
Cela vous aidera à créer une classe de communes de la préférence et de l'utiliser n'importe où, dans n'importe quelle classe.
Créer une classe nommée comme MySharedPreferences
Et l'utiliser comme
OriginalL'auteur Sunil