IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

problème de persistence


Sujet :

Android

  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut problème de persistence
    Bonsoir à toutes et à tous,

    dans une application, j'instancie une classe par son ajout à un ArrayList lors de l'appui sur un bouton. Le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public class BaseAppli extends Activity {
         ....
         private ArrayList<OpeBase> listOpe = new ArrayList<OpeBase>(); // Liste des opérateurs du schéma
          ....
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
          ....
                View.OnClickListener listener = new View.OnClickListener() { // Click sur un des ImageButton
                @Override
                public void onClick(View v) {
                    listOpe.add(new OpeRond().new Sommateur(250, 50, "", paint)); // instanciation d'une sous classe de OpeBase
                    schema.invalidate(); // pour l'affichage
                }
            };
    Mon smartphone est réglé pour rester une minute actif, au-delà de ce délai, l'affichage s'éteint. Lorsque je le rallume en appuyant sur la touche home puis en faisant un déverrouillage par un touché/glissé sur l'écran, je retrouve mon application, mais sans l'instanciation qui avait été faite.

    En regardant le cycle de vie Android, je ne vois rien à ce sujet, mais j'en conclus (via une observation au déboggueur) qu'il repasse par la case OnCreate. Si tel est las cas, il est alors normal que mon instance ne soit plus là.

    Comment faire pour la retrouver ? Suis-je obligé de passer par un enregistrement sur fichier ?

    Merci de votre aide.

    Pierre

  2. #2
    Membre expérimenté Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Par défaut
    Bonjour,

    Lors de ton passage en veille, Android va détruire ton activity et la recréer lorsque tu va la ré-afficher (ce qui va donc de nouveau exécuter ton "private ArrayList<OpeBase> listOpe = new ArrayList<OpeBase>();").

    Pour garder tes information, tu dois override la methode onSaveInstanceState(Bundle savedInstanceState).
    Regarde cette page, cela devrait t'aider:
    http://developer.android.com/trainin...ecreating.html

    GL HG

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci Altak, je vais regarder cela avec intérêt.

    Cordialement.

    Pierre

  4. #4
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Je complète la réponse précédente avec le fait que pour pouvoir sauver tes données dans le Bundle, il faudra que ta classe OpeBase implémente l'interface Parcelable.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  5. #5
    Membre expérimenté Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Par défaut
    Bonjour,

    Pour le coup, j'ai arrêté d'utiliser Parcelable moi, j'utilise Gson.
    Je serialize ma classe en Json et la sauvegarde dans le bundle sous forme de string et je la désarialize dans la onCreate (toujours avec Gson).

    Ca me donne deux fonctions comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        public String serializeToJson() {
            Gson gson = new Gson();
            String json = gson.toJson(this);
            return json;
        }
     
        static public Room deserializeFromJson(String jsonString) {
            Gson gson = new Gson();
            Room myClass = gson.fromJson(jsonString, Room.class);
            return myClass;
        }
    C'est beaucoup plus rapide a mettre en place que Parcelable et dans mes cas d'utilisation, c'est tout aussi efficace.
    D'ailleurs, je ne suis pas contre un avis pour savoir si cette pratique est déconseillé (etsi c'est le cas, pourquoi?)

    GL HF

Discussions similaires

  1. many-to-many problème de persistance
    Par kokumbo dans le forum Hibernate
    Réponses: 1
    Dernier message: 28/11/2007, 16h11
  2. [jBPM][4.2 GA]Problème de persistence
    Par zegreg dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 30/07/2007, 18h32
  3. Problème de persistance de ma connection en ADO ?
    Par hesky dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/03/2007, 14h32
  4. [Problème de persistance d'un BufferedReader]
    Par xarius dans le forum Langage
    Réponses: 2
    Dernier message: 31/05/2006, 21h44
  5. Problème LDAP (persistant!!!!!)
    Par onouiri dans le forum Développement
    Réponses: 15
    Dernier message: 27/11/2005, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo