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 :

Partager données entre activités


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Partager données entre activités
    Bonjour à tous,

    J'essaie actuellement de me familiariser avec le développement pour Android. Et je rencontre certaines difficultés quant au partage de données entre plusieurs activités.

    Voici mon problème (simplifié quitte à le rendre un peu bête):

    -J'ai 3 activités. La 1ère (la MainActivity permet à l'utilisateur de rentrer des données), la deuxième permet à l'utilisateur de les trier et la 3 ème affiche les résultats.

    J'aimerai créer une liste d'éléments dans la première activité à laquelle les 2 autres auraient accès.

    Je sais qu'il est possible de transférer des données au moment de la création des intents mais il me semble que cette solution est peu appropriée dans mon cas. Je pensais donc définir des variables globales mais j'ignore comment m'y prendre. (Je n'arrive pas a y accéder a partir d'une autre activité et je sais surtout que c'est généralement une solution à éviter :p )

    J'imagine qu'il doit exister une solution plus élégante donc je m'en remets à vous

    J'ai bien conscience qu'il s'agit d'un problème de débutant donc sans doute déjà abordé sur le forum mais difficile de trouver quand on ne sait pas ce qu'on cherche.

    (Je débute donc je dois sans doute confondre tout un tas de termes donc n'hésitez pas si vous voulez que je précise certaines de mes pensées)

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Android
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Android

    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Points : 30
    Points
    30
    Par défaut Données commune entre activités
    Salut, je ne sais pas si c'est la meilleur méthode, mais si tes données ne sont pas trop volumineuses tu peux créer une classe Application.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public class MyApplication extends Application {
     
     private static Context mContext; //pour le context
     private static int records[]; //des données... ici un tableau d'entiers
     private static boolean soundOn = true;
     
        public void onCreate(){
            super.onCreate();
            this.mContext = this;
        }
     
        //des fonctions get/set pour accéder à tes données depuis les autres activitées
        public static int getRecords(int gameNumber)   {
               return records[gameNumber];
         }
        public static int setRecords(int gameNumber, int record)   {
               this.records[gameNumber] = record;
         }
     
     
        public static Context getContext(){
            return mContext;
       }
     
     
    } //fin class MyApplication

    Ensuite, tu accède aux données depuis les autres activités de façon statique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int record =  MyApplcation.getRecords(1); //record pour jeu n°1

  3. #3
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par LolaBDNT Voir le message
    Bonjour à tous,

    J'essaie actuellement de me familiariser avec le développement pour Android. Et je rencontre certaines difficultés quant au partage de données entre plusieurs activités.

    Voici mon problème (simplifié quitte à le rendre un peu bête):

    -J'ai 3 activités. La 1ère (la MainActivity permet à l'utilisateur de rentrer des données), la deuxième permet à l'utilisateur de les trier et la 3 ème affiche les résultats.

    J'aimerai créer une liste d'éléments dans la première activité à laquelle les 2 autres auraient accès.

    Je sais qu'il est possible de transférer des données au moment de la création des intents mais il me semble que cette solution est peu appropriée dans mon cas. Je pensais donc définir des variables globales mais j'ignore comment m'y prendre. (Je n'arrive pas a y accéder a partir d'une autre activité et je sais surtout que c'est généralement une solution à éviter :p )

    J'imagine qu'il doit exister une solution plus élégante donc je m'en remets à vous

    J'ai bien conscience qu'il s'agit d'un problème de débutant donc sans doute déjà abordé sur le forum mais difficile de trouver quand on ne sait pas ce qu'on cherche.

    (Je débute donc je dois sans doute confondre tout un tas de termes donc n'hésitez pas si vous voulez que je précise certaines de mes pensées)
    Bonjour,
    Je sais qu'il est possible de transférer des données au moment de la création des intents mais il me semble que cette solution est peu appropriée dans mon cas.
    SI si, la solution est aussi bien appropriée dans ton cas que dans tous les autres consistant à transférer les données entre activity. Seulement il faut bien s'y prendre . Sinon, Garde ce conseil d'éviter au maximum l'utilisation des variables globales pour les passer entre activity.
    Je vais essayer de t'aider à mon pouvoir là où je serai bloqué (nous le serons tous deux ), il y aura des développeurs dans ce forum pour nous sortir de la situation (Heureusement). Mais seulement il faudrait que tu nous en donnes un peu plus.

    Pour commencer, quelles sont ces données de départ que l'utilisateur aurait entrées dans la première activity?
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonsoir a tous,

    Merci pour vos réponses.

    Je me suis renseigné sur la classe Application et il semblerait en effet que ça constitue une solution adéquate. (vu l'article ici: http://www.intertech.com/Blog/androi...ication-class/ )

    Pour ce qui est de transférer les données via les intents, puisque mes données est une liste d' "éléments" (ayant un String Contenu,int id, int position, int id et deux valeurs booléennes renseignant l'état dudit élément), je ne sais pas si c'est approprié. De plus, en regardant le cycle de vie des activités, je constate que les activités pourraient être supprimées et je m'interroge sur le risque que cela entraine aux niveau des pertes des données.

    Toujours est-il, je vais me renseigner sur le transfére de "classe de classe" par les intents (dont les types ne sont pas simples), je vais tester selon vos techniques et je mettrai la bannière "RESOLU" si tout se passe comme prévu.

    Encore merci,

    Je vous tiens au courant

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 584
    Points : 181
    Points
    181
    Par défaut
    Bonjour,
    à ma connaissance le plus simple est effectivement de passer par des variables (ici ta liste) en static. Mais il faut être prudent, sur un code complexe, ça peut vite poser problème, et devenir un peu dangereux.

    Sinon pour passer les données entre activités, je pense qu'il faut les lancer avec startactivityforresult, pour récupérer les données à la fermeture d'une activité et utiliser les extra (putExtra et getExtra). Tu devrais trouver pas mal d'exemple sur Internet, dont certains avec des listes

  6. #6
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par Bebuck Voir le message
    Bonjour,
    à ma connaissance le plus simple est effectivement de passer par des variables (ici ta liste) en static. Mais il faut être prudent, sur un code complexe, ça peut vite poser problème, et devenir un peu dangereux.
    Donc à éviter le plus que possible!
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 558
    Points
    10 558
    Par défaut
    Citation Envoyé par MasterMbg Voir le message
    Donc à éviter le plus que possible!
    Pas forcément : si tu fais un singleton statique qui permet de grouper toutes tes variables et les procédures/ fonctions de nettoyage/ fermeture/ passage en fond de tâche/ ...

    C'est de la programme un peu sale, mais rapide à mettre en place
    Mais il faut que 1) tu n'aies que peu de données 2) tu fasses attention que 1 et 1 seul objet modifie une variable, mais X qui l’utilisent

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par foetus Voir le message
    Mais il faut que 1) tu n'aies que peu de données 2) tu fasses attention que 1 et 1 seul objet modifie une variable, mais X qui l’utilisent
    Pas forcément... et même 1 seul reader pendant qu'un writer modifie la donnée peut être une catastrophe....
    Par contre Java a des fonction très utiles comme "synchronized"...
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class MySingleton
    {
            ArrayList<String>  maListe = new ArrayList<String>();
     
           private static MySingleton _instance;
           public synchronized static MySingleton getInstance()
           {
               if (_instance == null)
                   _instance = new MySingleton();
              return instance;
           }
     
     
          public void addValue(String v)   // un seul writer 
          {
               this.maListe.add(v);   // ne marche pas !!!
          }
     
          public void addValues(Collection<String> coll)
          {
               synchronized (this.maListe) {   // fonctionne
                   this.maListe.addAll(coll);
               }
           }
     
          public List<String> getValuesBad()
          {
               return this.maListe;  // ne marche pas !!! un "writer" pourrait modifier la liste pendant ce temps !
           }
     
          public List<String> getValuesGood()
          {
              List<String> ret;
              synchronized (this.maListe) {
                  ret = this.maListe.clone();
              }
              return ret;
          }
    }
    Bon, sinon le problème du singleton est surtout d'y conserver des notions de contexte (donc de View, Database, Activity, ...) qui engendreraient une fuite mémoire certaine.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 558
    Points
    10 558
    Par défaut
    @nicroman: effectivement mais il faut toujours faire attention aux données partagés par des threads (fils d’exécution), où quelles soient

    Et oui, lorsque je parle de "données dans un singleton", ce sont toutes les données internes (états, liste d'objets, database...) et non pas celles structurelles qui sont plus ou moins gérées par l'OS, comme les fenêtres, les vues, les contrôleurs, ... (même si cela ne t'empêche pas d'avoir un pointeur faible (dangereux)/ fort sur ces données)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passage de données entre activitées
    Par hossamoukli dans le forum Android
    Réponses: 3
    Dernier message: 21/04/2013, 03h53
  2. Partage données entre OpenERP et webservice C#
    Par Franck.michel44 dans le forum Odoo (ex-OpenERP)
    Réponses: 0
    Dernier message: 13/01/2013, 15h03
  3. partage de donné entre 2 thread
    Par firejocker dans le forum MFC
    Réponses: 7
    Dernier message: 26/01/2006, 14h54
  4. partage de données entre applications
    Par dr_feelgood dans le forum Access
    Réponses: 2
    Dernier message: 09/11/2005, 10h42

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