J'ai un ArrayList
avec des objets personnalisés. Chaque objet personnalisé contient une variété de chaînes et de nombres. J'ai besoin que le tableau reste, même si l'utilisateur quitte l'activité et souhaite ensuite revenir plus tard, mais je n'ai pas besoin du tableau disponible après la fermeture complète de l'application. J'enregistre beaucoup d'autres objets de cette façon en utilisant le SharedPreferences
mais je ne peux pas comprendre comment enregistrer mon tableau entier de cette façon. Est-ce possible? Peut SharedPreferences
- être que ce n'est pas la façon de procéder? Existe-t-il une méthode plus simple?
android
arraylist
sharedpreferences
ryandlf
la source
la source
Réponses:
Après l'API 11,
SharedPreferences Editor
acceptezSets
. Vous pouvez convertir votre liste en unHashSet
ou quelque chose de similaire et le stocker comme ça. Lorsque vous le relisez, convertissez-le en unArrayList
, triez-le si nécessaire et vous êtes prêt à partir.Vous pouvez également sérialiser votre
ArrayList
, puis l'enregistrer / le lire vers / depuisSharedPreferences
. Voici la solution:EDIT:
Ok, ci-dessous est la solution pour enregistrer en
ArrayList
tant qu'objet sérialiséSharedPreferences
, puis le lire à partir de SharedPreferences.Étant donné que l'API prend uniquement en charge le stockage et la récupération de chaînes vers / depuis SharedPreferences (après l'API 11, c'est plus simple), nous devons sérialiser et dé-sérialiser l'objet ArrayList qui contient la liste des tâches en chaîne.
Dans la
addTask()
méthode de la classe TaskManagerApplication, nous devons obtenir l'instance de la préférence partagée, puis stocker la liste de tableaux sérialisée à l'aide de laputString()
méthode:De même, nous devons récupérer la liste des tâches de la préférence dans la
onCreate()
méthode:Vous pouvez obtenir une
ObjectSerializer
classe à partir du projet Apache Pig ObjectSerializer.javala source
putStringSet
ajout à l'API 11. La plupart des programmeurs actuels visent à louer l'API 8 (Froyo).scoreEditor
?L'utilisation de cet objet -> TinyDB - Android-Shared-Preferences-Turbo est très simple.
mettre
obtenir
METTRE À JOUR
Des exemples utiles et un dépannage peuvent être trouvés ici: Android Shared Preference TinyDB putListObject frunction
la source
tinydb.putList()
Regardez les exemples sur la page liée.Enregistrement
Array
dansSharedPreferences
:Chargement des
Array
données depuisSharedPreferences
la source
ArrayList
dans,SharedPrefeneces
vous pouvez l'utilisermEdit1.clear()
pour éviter cela.Vous pouvez le convertir
JSON String
et stocker la chaîne dans leSharedPreferences
.la source
Comme l'a dit @nirav, la meilleure solution est de le stocker dans sharedPrefernces en tant que texte json en utilisant la classe d'utilitaires Gson. Exemple de code ci-dessous:
la source
Hé amis, j'ai obtenu la solution du problème ci-dessus sans utiliser la
Gson
bibliothèque. Ici, je poste le code source.1. déclaration variable ie
2. Initialisation variable, c.-à-d.
3. stockez la valeur de sharedPreference en utilisant
packagesharedPreferences()
:4. récupérer la valeur de sharedPreference en utilisant
retriveSharedValue()
:J'espère que cela vous sera utile ...
la source
String
s?JAVA:
Kotlin
la source
Android SharedPreferances vous permet d'enregistrer les types primitifs (Boolean, Float, Int, Long, String et StringSet qui sont disponibles depuis API11) en mémoire sous forme de fichier xml.
L'idée clé de toute solution serait de convertir les données en l'un de ces types primitifs.
Personnellement, j'adore convertir ma liste au format json, puis l'enregistrer en tant que chaîne dans une valeur SharedPreferences.
Pour utiliser ma solution, vous devrez ajouter Google Gson lib.
Dans gradle, ajoutez simplement la dépendance suivante (veuillez utiliser la dernière version de google):
Enregistrer les données (où HttpParam est votre objet):
Récupérer des données (où HttpParam est votre objet):
la source
Ceci est votre solution parfaite .. essayez-le,
la source
Vous pouvez également convertir l'arraylist en une chaîne et l'enregistrer de préférence
Vous pouvez enregistrer l'arraylist après l'avoir converti en chaîne à l'aide de la
convertToString
méthode et récupérer la chaîne et la convertir en tableau à l'aideconvertToArray
Après l'API 11, vous pouvez cependant enregistrer directement dans SharedPreferences !!! :)
la source
Pour String, int, boolean, le meilleur choix serait sharedPreferences.
Si vous souhaitez stocker ArrayList ou toute donnée complexe. Le meilleur choix serait la bibliothèque papier.
Ajouter une dépendance
Initialiser le papier
Doit être initialisé une fois dans Application.onCreate ():
sauver
Chargement des données
Utilisez des valeurs par défaut si l'objet n'existe pas dans le stockage.
Voici.
https://github.com/pilgr/Paper
la source
J'ai lu toutes les réponses ci-dessus. C'est tout à fait correct mais j'ai trouvé une solution plus simple comme ci-dessous:
Enregistrement de la liste de chaînes dans les préférences partagées >>
}
et pour obtenir la liste des chaînes à partir des préférences partagées >>
Voici
Constants.APP_PREFS
le nom du fichier à ouvrir; ne peut pas contenir de séparateurs de chemin.la source
Aussi avec Kotlin:
la source
la meilleure façon est de convertir en chaîne JSOn à l'aide de GSON et d'enregistrer cette chaîne dans SharedPreference. J'utilise également cette méthode pour mettre en cache les réponses.
la source
Vous pouvez enregistrer une chaîne et une liste de tableaux personnalisés à l'aide de la bibliothèque Gson.
=> Vous devez d'abord créer une fonction pour enregistrer la liste des tableaux dans SharedPreferences.
=> Vous devez créer une fonction pour obtenir la liste des tableaux à partir de SharedPreferences.
=> Comment appeler la fonction de sauvegarde et de récupération des listes de tableaux.
=> N'oubliez pas d'ajouter la bibliothèque gson au niveau de votre application build.gradle.
implémentation "com.google.code.gson: gson: 2.8.2"
la source
Vous pouvez référencer les fonctions serializeKey () et deserializeKey () de la classe SharedPreferencesTokenCache de FacebookSDK. Il convertit le supportedType en objet JSON et stocke la chaîne JSON dans SharedPreferences . Vous pouvez télécharger le SDK d' ici
la source
Pourquoi ne collez-vous pas votre liste sur une classe d'application? Il n'est détruit que lorsque l'application est vraiment détruite , il restera donc aussi longtemps que l'application sera disponible.
la source
Le meilleur moyen que j'ai pu trouver est de créer un tableau de clés 2D et de placer les éléments personnalisés du tableau dans le tableau de clés 2D, puis de le récupérer via le tableau 2D au démarrage. Je n'aimais pas l'idée d'utiliser un jeu de chaînes car la plupart des utilisateurs d'Android sont toujours sur Gingerbread et utiliser un jeu de chaînes nécessite un nid d'abeille.
Exemple de code: ici ditor est l'éditeur de préférences partagé et rowitem est mon objet personnalisé.
la source
le code suivant est la réponse acceptée, avec quelques lignes supplémentaires pour les nouveaux (moi), par exemple. montre comment reconvertir l'objet de type défini en arrayList, et des conseils supplémentaires sur ce qui précède «.putStringSet» et «.getStringSet». (merci evilone)
la source
la source
n'oubliez pas d'implémenter Serializable:
https://stackoverflow.com/a/7635154/4639974
la source
Vous pouvez utiliser la sérialisation ou la bibliothèque Gson pour convertir la liste en chaîne et vice versa, puis enregistrer la chaîne dans les préférences.
Utilisation de la bibliothèque Gson de Google:
Utilisation de la sérialisation Java:
la source
Cette méthode est utilisée pour stocker / enregistrer la liste des tableaux: -
Cette méthode est utilisée pour récupérer la liste des tableaux: -
la source
Vous pouvez le convertir en
Map
objet pour le stocker, puis redéfinir les valeurs en ArrayList lorsque vous récupérez leSharedPreferences
.la source
Utilisez cette classe personnalisée:
Comment utiliser:
la source
cela devrait fonctionner:
eux, pour l'attraper juste:
ça marche pour moi.
la source
Ma classe d'utilitaires pour la liste de sauvegarde
SharedPreferences
En utilisant
.
Code complet de mes utils // vérifier en utilisant l'exemple dans le code d'activité
la source
J'ai utilisé la même manière de sauvegarder et de récupérer une chaîne, mais ici avec arrayList, j'ai utilisé HashSet comme médiateur
Pour enregistrer arrayList dans SharedPreferences, nous utilisons HashSet:
1- nous créons la variable SharedPreferences (à l'endroit où le changement se produit sur le tableau)
2 - nous convertissons le arrayList en HashSet
3 - puis nous mettons le stringSet et appliquons
4 - vous obtenezStringSet dans HashSet et recréez ArrayList pour définir le HashSet.
la source
la source
Toutes les réponses ci-dessus sont correctes. :) J'ai moi-même utilisé l'un d'eux pour ma situation. Cependant, lorsque j'ai lu la question, j'ai constaté que le PO parlait en fait d'un scénario différent du titre de cet article, si je ne me trompais pas.
"J'ai besoin que le tableau reste, même si l'utilisateur quitte l'activité et veut ensuite revenir plus tard"
Il souhaite en fait que les données soient stockées jusqu'à ce que l'application soit ouverte, indépendamment des changements d'écran de l'utilisateur dans l'application.
"mais je n'ai pas besoin du tableau disponible après la fermeture complète de l'application"
Mais une fois que l'application est fermée, les données ne doivent pas être conservées. Par conséquent, je pense que l'utilisation
SharedPreferences
n'est pas le moyen optimal pour cela.Ce que l'on peut faire pour cette exigence est de créer une classe qui étend la
Application
classe.En utilisant le setter et le getter, ArrayList est accessible de n'importe où avec l'application. Et la meilleure partie est qu'une fois l'application fermée, nous n'avons pas à nous soucier des données stockées. :)
la source