web-dev-qa-db-fra.com

Sauvegarde des données à la fermeture de l'application et récupération de ces données

Je sais, il y a beaucoup de questions concernant la sauvegarde/récupération de données ici. Je cherchais moi-même des choses et je pensais vraiment pouvoir trouver mes réponses sans avoir à "poser de question", mais je commençais à me demander une chose pour laquelle je n'ai pas vu de réponse ici.

MA SITUATION:

Naturellement, je fais une application. À la fermeture de l'application, je souhaite enregistrer un simple tableau de nombres (0 ou 1) ou de valeurs booléennes pour ainsi dire. Au démarrage de l'application, je souhaite rechercher ce tableau, s'il existe, et le récupérer pour l'utiliser dans l'application.

J'ai commencé à placer mon code dans l'activité dans laquelle le tableau serait utilisé. Mais j'ai commencé à me demander si je devrais copier/coller la fonction onStop() remplacée dans toutes mes activités? Ou est-ce que je le fais dans l'activité principale et que je lie en quelque sorte les autres activités?.

Fondamentalement, quel que soit l'état/l'activité de l'application en cours lors de la fermeture de l'application, je souhaite pouvoir enregistrer le tableau d'int/bool et l'ouvrir à nouveau au démarrage de l'application.

Peut-être que je ne savais pas comment chercher ce que je voulais, alors expliquer que c'était la bonne chose à faire.

Cela ne me dérange pas de chercher plus, mais si quelqu'un me donnait au moins la bonne direction, je vous en serais extrêmement reconnaissant.

EDIT: S'il existe un meilleur moyen de faire ce que je veux que ce que j'ai décrit (par exemple, en utilisant un état différent au lieu de onStop(), par exemple), n'hésitez pas à lancer des idées. C'est la première fois que je suis confronté au cycle de vie des activités et je suis un peu confus même après avoir parcouru les didacticiels de développement Android. Je pense vraiment qu'ils sont mal faits dans la plupart des cas.

13
lilgodwin

Lorsque votre application a besoin de sauvegarder des données persistantes, vous devez toujours le faire avec la méthode onPause() et non avec onStop(). Parce que si Android OS tue votre processus, les méthodes onStop() et onDestroy() ne sont jamais appelées. De même, récupérez les données dans la méthode onResume().

10
Aniket Thakur

En regardant le but que vous voulez remplir, Préférences Partagées est tout ce que vous voulez.

La documentation indique:

"SharePreferences fournit un cadre général qui vous permet de sauvegarder Et de récupérer des paires clé-valeur persistantes de types de données primitives. Vous Pouvez utiliser SharedPreferences pour enregistrer des données primitives: et des chaînes. Ces données persisteront au cours des sessions utilisateur (même si votre application est supprimée). "

2
Chintan Soni

Utilisez SharedPreference pour stocker une petite quantité de données ou SQLite pour stocker une grande quantité de données . Voir ce lien 

http://developer.Android.com/guide/topics/data/data-storage.html

1
priyank

Sérialisez un objet et transmettez-le, ce qui est plus fiable que les préférences partagées (vous rencontriez de nombreux problèmes de cohérence avec les préférences partagées):

public class SharedVariables {

    public static <S extends Serializable> void writeObject(
            final Context context, String key, S serializableObject) {

        ObjectOutputStream objectOut = null;
        try {
            FileOutputStream fileOut = context.getApplicationContext().openFileOutput(key, Activity.MODE_PRIVATE);
            objectOut = new ObjectOutputStream(fileOut);
            objectOut.writeObject(serializableObject);
            fileOut.getFD().sync();
        } catch (IOException e) {
            Log.e("SharedVariable", e.getMessage(), e);
        } finally {
            if (objectOut != null) {
                try {
                    objectOut.close();
                } catch (IOException e) {
                    Log.e("SharedVariable", e.getMessage(), e);
                }
            }
        }
    }

Ensuite, utilisez une classe à utiliser:

public class Timestamps implements Serializable {

private float timestampServer;

public float getTimestampServer() {
    return timestampServer;
}

public void setTimestampServer(float timestampServer) {
    this.timestampServer = timestampServer;
}

}

Ensuite, partout où vous voulez écrire dans la variable, utilisez:

SharedVariables.writeObject(getApplicationContext(), "Timestamps", timestampsData);
0
Afshin Ghazi