Je dois enregistrer des données SharedPreferences
de telle sorte où j'ai un objet comme celui - ci:
{
"days": [
{
"exercises": [
{
"name": "Bench Press",
"sets": 3,
"reps": 8
},
{
"name": "Skull Crushers",
"sets": 3,
"reps": 8
},
{
"name": "Flys",
"sets": 3,
"reps": 8
}
]
},
{
"exercises": [
{
"name": "Bench Press",
"sets": 3,
"reps": 8
},
{
"name": "Skull Crushers",
"sets": 3,
"reps": 8
},
{
"name": "Flys",
"sets": 3,
"reps": 8
}
]
}
]
}
Je vais devoir tirer de l'objet et ajouter à l'objet. Je sais que vous ne pouvez pas enregistrer les cartes à SharedPreferences
. Je commence à penser que mon meilleur pari est d'utiliser , ObjectOutputStream
mais je ne suis pas sûr que ce soit le meilleur pari d'utiliser la mémoire interne. Je suppose que je suis en train de chercher des conseils quant à ce que mes meilleures options.
edit: d'après ce que Advice-Dog
dit, je pense mon meilleur pari est d'utiliser gson
. Cela veut- il dire que quand je veux (par exemple) ajouter un autre exercice au second indice de « jours » que je vais d' abord saisir l'objet de préférences, le convertir à partir gson
d'un objet, puis ajoutez l'exercice, puis reconvertir à gson
, puis remplacer les préférences? Je ne dis pas que cela est mauvais je veux juste savoir si c'est ce qu'il faut faire et s'il est conseillé.
Lors de l' enregistrement des types plus complexes dans Android, je suggère d' utiliser gson
. Gson est la bibliothèque d'analyse JSON de Google, et même si vous ne l' utilisez JSON, vous pouvez convertir votre Objects
en une chaîne JSON, et stocker facilement.
Par exemple, vous pouvez convertir votre liste Objects
en un String
comme celui - ci.
val list : List<MyObject> // ... add items to your list
// Convert to JSON
val string = gson.toJson(list)
// Store it into Shared Preferences
preferences.putString("list", string).apply()
Et vous pouvez facilement obtenir de nouveau dans une telle liste.
// Fetch the JSON
val string = preferences.getString("list", "")
// Convert it back into a List
val list: List<MyObject> = gson.fromJson(string, object : TypeToken<List<MyObject>>() {}.type)