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 :

Echange de données entre l'activité principale et une activité secondaire.


Sujet :

Android

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Echange de données entre l'activité principale et une activité secondaire.
    Bonsoir à toutes et à tous,

    Pour échanger des données entre une activité principale et une activité secondaire mise en œuvre par un Intent, on utilise les instructions putExtra... et getExtra....

    Or, je m'aperçois qu'il est tout à fait possible d'échanger des données (dans les deux sens) sans utiliser ces instructions.

    Alors, qu'ont de particulier ces instructions ?

    Merci pour vos renseignements.

    Pierre

  2. #2
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    Or, je m'aperçois qu'il est tout à fait possible d'échanger des données (dans les deux sens) sans utiliser ces instructions.
    De quelle manière ? Si tu fais allusion à utiliser ton activité1 depuis ton activité2 par le biais d'une référence vers activité1 ou encore en stockant ton activité1 dans un static public, alors oui cette une très mauvaise idée.

    Parce que sur android, seule l'activité en cours d'utilisation est garantie de ne pas être détruite pas le système, ce qui n'est pas le cas des autres.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par smartties Voir le message
    ... Parce que sur android, seule l'activité en cours d'utilisation est garantie de ne pas être détruite pas le système, ce qui n'est pas le cas des autres.
    Je conçois qu'il soit logique d'utiliser les Extras... , mais

    Il y a quelque chose qui cloche et que je ne comprends pas : si l'activité principale qui a lancé l'activité secondaire est détruite (par qui, par quoi ?), alors, au retour, que je passe par des extras ou par référence, je tomberai sur quelque chose de mort ???

    Par ailleurs, les Extras ne permettent d'échanger des données qu'au lancement et au retour de l'activité secondaire (que j'ai compris), comment fait-on si on veut faire des échanges (primaire vers secondaire) en cours de fonctionnement de l'activité secondaire ? On envoie tout (même si on n'est pas amené à s'en servir) dès le lancement de l'activité secondaire ? Dans mon cas, je veux traiter jusqu'à une vingtaine de fichier de l'ordre de 1 Mo chacun. Je suppose que le transfert de données au passage de l'activité principale à la secondaire se fait par copie des données ?

    Merci pour vos renseignements.

    Pierre

  4. #4
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    When one activity starts another, they both experience lifecycle transitions. The first activity pauses and stops (though, it won't stop if it's still visible in the background), while the other activity is created. In case these activities share data saved to disc or elsewhere, it's important to understand that the first activity is not completely stopped before the second one is created. Rather, the process of starting the second one overlaps with the process of stopping the first one.
    src : http://developer.android.com/guide/c...tingActivities

    Apres un appel de startactivity depuis activité1, elle sera en transition vers l'état OnStop. Quand une activité est stoppée (onStop), rien ne garantie que l'OS ne va pas la détruire, dans le cas où le téléphone viendrait à manquer de mémoire par exemple.
    Il se trouve que la plus part du temps, l'activité1 sera encore en mémoire, bien que l'utilisateur soit dans l'activité2 mais bon lorsque l'on créer une application, on ne s'amuse pas à faire quelque chose qui marche une fois sur deux ou crash.

    If an activity is paused or stopped, the system can drop the activity from memory by either asking it to finish, or simply killing its process. When it is displayed again to the user, it must be completely restarted and restored to its previous state.
    src : http://developer.android.com/referen...ty.html​

    Dernierement, dans ton cas utiliser les "Extra" (bundles) n'est pas adapté.
    Les bundles permettent d'envoyer des données mais en très petite quantités. Tes fichiers de 1mo sont tros gros et ne passeront pas dans un bundle. Une des façon safe de faire, serait de les écrire dans des fichiers temporaires avant le startactivity de l'activité1 et de les relire dans le OnCreate de ton activité2.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par smartties Voir le message
    ... Tes fichiers de 1mo sont tros gros et ne passeront pas dans un bundle. Une des façon safe de faire, serait de les écrire dans des fichiers temporaires avant le startactivity de l'activité1 et de les relire dans le OnCreate de ton activité2.
    Je pense que le transfert par fichiers va être long et compliqué. Je transmets mes fichiers (qui sont des tableaux de double selon le code suivant :

    A l'envoi, je peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public ArrayList<Double> listPts; // Liste des points résultant de la simulation
        ...
     
                            aff_Courbes = new Intent(BaseAppli.this, AffCourbes.class);
                            aff_Courbes.putExtra("nbCourbes", GLB.nbCourbes);
                            for (int i = 0; i < GLB.nbCourbes; i++) {
                                aff_Courbes.putExtra("listPts_"+String.valueOf(i), opeCours.listPts);
                            }
                            startActivity(aff_Courbes); // Page d'affichage des courbes
    Problème , à la réception, si la méthode "getIntegerArrayListExtra" existe, la méthode "getDoubleArrayListExtra" n'existe pas, ce qui m'aurait permis d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            aff_Courbes = getIntent();
            byte nbCourbes = aff_Courbes.getByteExtra("nbCourbes", (byte) 1);
            double [][] ptsCrb = new double [4][];
            for (int i = 0 ; i < nbCourbes; i++) {
                ptsCrb[i] = aff_Courbes.getDoubleArrayListExtra("listPts_"+String.valueOf(i)); // la méthode n'existe pas
            }
    Mis à part de faire référence aux données de l'activité principale, comment faire ?

    Merci de votre aide.

    Pierre

  6. #6
    Membre confirmé Avatar de smartties
    Homme Profil pro
    Dev
    Inscrit en
    Février 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Février 2010
    Messages : 222
    Points : 496
    Points
    496
    Par défaut
    Citation Envoyé par ChPr
    Envoyé par smartties : Tes fichiers de 1mo sont tros gros et ne passeront pas dans un bundle. Une des façon safe de faire, serait de les écrire dans des fichiers temporaires avant le startactivity de l'activité1 et de les relire dans le OnCreate de ton activité2.

    Je pense que le transfert par fichiers va être long et compliqué.


    Peut être, mais au moins ça marche. Une solution qui serait plus rapide, serait de redéfinir la class Application et de l'utiliser comme un singleton, pour stocker les valeurs que tu souhaite partager entre tes activités.
    Il y a d'autres méthodes ici : http://stackoverflow.com/questions/4...een-activities .

    PS : n'utilise pas d'extra si tes fichiers on une taille proche d'un mo : src 1, src 2


    Bonne continuation.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Hier, j'ai essayé avec des extraserializable. Ce que je n'ai pas compris, c'est que cela fonctionnait en mode débug avec Android Studio, mais plantait (nulexceptionpointer) en mode hors débogage ou smartphone en autonome. Même avec des fichiers de quelques dizaines de ko.

    J'utilise alors une variable statique de mon activité principale qui pointe sur instance d'une classe contenant mes données : ça fonctionne très bien !!!

    J'essaierai les singleton.

    Cordialement.

    Pierre

Discussions similaires

  1. [Tableaux] Echange de données entre JSP et PHP
    Par seb34 dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2006, 13h53
  2. Echange de données entre JSP et PHP
    Par seb34 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 21/02/2006, 13h28
  3. Réponses: 16
    Dernier message: 29/06/2005, 20h55
  4. Telechargement d'internet et echange de données entre 2 pc
    Par Invité dans le forum Développement
    Réponses: 5
    Dernier message: 09/05/2004, 21h22
  5. [Kylix] Echange de données entre fiches
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 01/07/2003, 11h34

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