0
votes

Comment enregistrer des variables après avoir quitté l'application dans Kotlin

J'essaie de créer une application de cartes mémoire dans Kotlin mais je ne sais pas comment faire enregistrer les cartes mémoire que je crée après avoir quitté.

val flashCards = FlashCardList(50)
flashCards.addCard(inputTerm.text.toString(),inputDefinition.text.toString(),false)

Ce code ci-dessus crée une liste de cartes mémoire (taille 50) avec terme et définition, puis y ajoute. Comment puis-je faire cette sauvegarde même après avoir quitté? Ma compréhension de la recherche est d'utiliser les préférences partagées mais même après avoir lu quelques explications, je ne comprends pas vraiment comment j'utiliserais cela ici. Si quelqu'un pouvait transformer mon code ci-dessus en un code qui utilise des préférences partagées (ou toute forme de sauvegarde de variables), je pourrais essayer de comprendre ce qui se passe à partir de cela.

(Ceci est un autre message sur ce forum que j'ai lu mais ne pouvait pas comprendre au cas où quelqu'un d'autre essaie de le lier: enregistrer les variables après avoir quitté l'application? a >)


0 commentaires

3 Réponses :


0
votes

Comme nous devons stocker des modaux personnalisés dans des préférences partagées, nous devons rendre les objets sérialisables. Gson est la bibliothèque de Google qui peut le faire. Utilisez d'abord la bibliothèque Gson , puis:

Stockage dans les préférences partagées:

// Get json from shared preference
var appSharedPrefs = PreferenceManager
            .getDefaultSharedPreferences(this.getApplicationContext());
var gson = Gson();
var jsonFlashCards = appSharedPrefs.getString("MyObject", "");

// Convert json string to array list
Type type = new TypeToken<List<FlashCardList>>(){}.getType();
List<FlashCardList> carsList = gson.fromJson(jsonFlashCards, type);

Lecture à partir des préférences partagées:

val flashCards = FlashCardList(50)
flashCards.addCard(inputTerm.text.toString(),
   inputDefinition.text.toString(),false)
var gson = Gson()

// Convert our object in json string 
var jsonFlashCards = gson.toJson(flashCards);
Log.d("TAG","jsonFlashCards = " + jsonFlashCards);

// store json in shared preference
var appSharedPrefs = PreferenceManager
            .getDefaultSharedPreferences(this.getApplicationContext());
var prefsEditor = appSharedPrefs.edit();
prefsEditor.putString("MyObject", jsonFlashCards)
prefsEditor.commit()

Pour ajouter Gson dans votre projet: bibliothèque Gson dans Android Studio

Référence:

  1. https://stackoverflow.com/a/22019470/1994950

    li >
  2. https://stackoverflow.com/a/15011927/1994950

    li >


0 commentaires

0
votes

Vous pouvez également utiliser Sérialisation à la place de GSON (juste dans la mesure où vous êtes classe avec Serializable), après cela, vous pouvez l'enregistrer et le récupérer, à partir de la Pref partagée.

fun <T : Serializable?> saveSerializable(
context: Context,
objectToSave: T,
fileName: String?
) {
try {
    val fileOutputStream: FileOutputStream =
        context.openFileOutput(fileName, Context.MODE_PRIVATE)
    val objectOutputStream = ObjectOutputStream(fileOutputStream)
    objectOutputStream.writeObject(objectToSave)
    objectOutputStream.close()
    fileOutputStream.close()
} catch (e: IOException) {
    e.printStackTrace()
}
}

fun <T : Serializable?> readSerializable(
context: Context,
fileName: String?
): T? {
var objectToReturn: T? = null
try {
    val fileInputStream = context.openFileInput(fileName)
    val objectInputStream = ObjectInputStream(fileInputStream)
    objectToReturn = objectInputStream.readObject() as T
    objectInputStream.close()
    fileInputStream.close()
} catch (e: IOException) {
    e.printStackTrace()
} catch (e: ClassNotFoundException) {
    e.printStackTrace()
  }
  return objectToReturn
  }


0 commentaires

0
votes

En utilisant les préférences partagées, vous pouvez enregistrer les variables qui n'ont que des types primitifs comme un entier, une chaîne, un flottant, etc. Dans votre cas, je créerais une classe avec un nom par exemple "FlashCardData" qui stockait toutes les données de votre FlashCard et créerais les deux méthodes à l'intérieur, la première renverra toutes ses données sous forme de chaîne json que vous pourrez ensuite stocker dans SharedPreferences de l'application et la deuxième méthode (ou vous pouvez à la place créer un constructeur secondaire pour la classe) qui prendront une chaîne json avec les données de la FlashCard et renverront une instance de la classe FleshCardData remplie avec les données de la chaîne json. Et enfin, je passerais une classe FlashCardData au constructeur FlashCard où la FlashCard prendra toutes les données nécessaires, et je créerais également une méthode à l'intérieur d'une FlashCard qui renverra une istance de FlashCardData qui a été transmise au constructeur FlashCard.


0 commentaires