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 :

Quel type de stockage de données dois-je utiliser ?


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 87
    Points
    87
    Par défaut Quel type de stockage de données dois-je utiliser ?
    Bonjour,

    Je suis débutant dans le développement Android, pour le moment j'essaye d'évaluer les principaux outils à ma disposition et de faire les (bons) choix avant de débuter mon application.

    L'application est simple, via un webservice, je dois pouvoir me loguer et récupérer des informations (en JSON) et les afficher dans mon app. (Ce sont des information financières, mais peu importe).

    En cas d'absence de connexion internet, je dois pouvoir accéder au mode Offline et consulter les derniers états reçus. Typiquement, les données (pour commencer) ne changeront pas plus qu'une fois par jour.

    D'après moi le plus simple est de travailler avec

    - une base de données SQLite pour stocker en cas de besoin pour le mode Offline et pas directement dans un fichier ou dans une ressource de type XML.

    Qu'en pensez-vous ? Si je dis des bêtises n'hésitez pas à me corriger ;-) Je suis là pour apprendre !

    Bien à vous.

    Lionel

  2. #2
    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
    Non non c'est ça...

    Tu as tout bon pour l'instant....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    Si ta structure des données n'est pas compliqué et pas trop volumineuse, je pencherai plutôt vers le composant SharedPreferences :

    http://developer.android.com/guide/t...rage.html#pref

    C'est plus simple à mettre en œuvre qu'une base de données SQLLite.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 87
    Points
    87
    Par défaut
    Merci pour les conseils.

    L'Objet SharedPreference ne me semble pas judicieux car je vais quand même recevoir quelques données pour lesquelles une base de donnée relationnelle est intéressante.

    De plus l'application risque d'évoluer et le volume de donnée augmentera.


    J'ai une autre question qui n'a rien à avoir avec la précédente.

    Je dois me connecter à un WebService qui a priori m’enverra les données en JSON. (En accord avec mon collègue qui développe l'application équivalante sous iOS).

    Quelle bibliothèque conseillez-vous pour effectuer les (dé)-sérialisations ?

    J'aurais tendance à utiliser org.json.* puisque c'est celle qui est "native", mais j'ai entendu parler d'autre libraires comme JackSON (http://jackson.codehaus.org/). Qu'en pensez-vous ? Est-ce que JackSON propose des outils plus performants ou intéressant par rapport à org.json.* ?


    Enfin en ce qui concerne la communication avec le WS, on partirait vers une infrastructure REST, le problème est que je n'ai jamais travaillé avec un Web-Service et j'ai même du mal à comprendre la différence entre les différentes infrastructure et savoir "ce que je dois faire pour commencer".

    Avez-vous de bons tutoriaux à me proposer (j'en ai déjà trouvé quelques-un et vais les décortiquer mais ils semblent tous utiliser des techniques légèrement différentes où alors font appel à des API spécifique que je ne connais pas et que de toute façon je n'utiliserai pas).

    D'avance merci pour votre aide.

    Lionel

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    A priori l'appel à ton WebService ressemble fortement à un appel HTTP standard sauf qu'au lieu de récupérer du HTML tu récupèrera des données JSON qui sont du texte techniquement.

    Dans les projets sur lesquels j'ai travaillé nous avons utilisé la classe HttpClient et ses copines pour créer des requêtes vers les webservices.

    Ensuite pour (dé)sérialiser le Json il y a certes l'API en standard mais des librairies facilitent pas mal le travail. J'ai utilisé Gson qui permet de convertir en quelques lignes de code des données Json en objets Java mais Jackjson (le nom est bien trouvé ) a l'air très bien et plus performant.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par Guybrush34 Voir le message
    A priori l'appel à ton WebService ressemble fortement à un appel HTTP standard sauf qu'au lieu de récupérer du HTML tu récupèrera des données JSON qui sont du texte techniquement.

    Dans les projets sur lesquels j'ai travaillé nous avons utilisé la classe HttpClient et ses copines pour créer des requêtes vers les webservices.

    Ensuite pour (dé)sérialiser le Json il y a certes l'API en standard mais des librairies facilitent pas mal le travail. J'ai utilisé Gson qui permet de convertir en quelques lignes de code des données Json en objets Java mais Jackjson (le nom est bien trouvé ) a l'air très bien et plus performant.
    Merci, j'ai en effet utilisé JackSON qui selon des benchmarks est bien plus rapide.

    Pour les requêtes, utiliser HttpClient semble être une excellente idée, j'ai d'ailleurs utilisé le DefaultHttpClient (dans un thread séparé du main Thread : notez que c'est important car dans les dernières versions d'Android, si on ne fait pas ça l'application plante).
    _________________________________________________________________

    Je reviens sur ma question de départ.

    Existe-t'il un moyen simple de stocker directement des objets dans cette base de donnée SQLite ? (Une espèce de surcouche comme Hibernate ?)

    Mon collègue qui développe l'application équivalente sous iOS dispose d'un tel outil. J'espère donc trouver quelque chose de semblable :-)

    En cherchant un peu, je trouve deux sortes de solutions :

    - Ce tutoriel qui en fait fait une sorte de mapping manuel et créé un Helper pour stocker facilement ses objets. C'est simple, efficace, mais un tout petit peu laborieux. Par contre je pense que ça doit être relativement performant.

    - Ce tutoriel conseille une libraire qui permet apparemment de faire le mapping assez simplement, mais cela n'a pas l'air d'être une librairie très répandue et on a aucune idée de la performance... Je préfère donc éviter.

    Pour information, actuellement mon application reçoit à la connexion un ensemble de données globales et fonctionne uniquement avec ces données. Je ne dois stocker que le dernier état (dans son entièreté) et rien d'autre dans le cas où je veux relancer l'application "offline".

    D'avance merci pour votre aide.

    Lionel

  7. #7
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Tu sérialises tes objets et tu les rentres dans ta BDD, dans un champ BYTE ?

    Le bon point de iOS, c'est qu'il te permet de créer ton schéma de BDD via une interface WYSIWYG et qu'il se charge ensuite de faire tout ce qu'il faut (le mauvais point est ce n'est absolument pas portable à priori).

    Enfin, pour moi, ça dépend de ce que tu veux vraiment sauvegarder (objets, données, états ...) et du format de ce que tu veux sauvegarder.

    Ce sont des données sous format JSON que tu reçois, soit.
    Pour moi, tu as deux solutions :
    • parser le flux (pour avoir les données, comme tu le fais déjà sans doute) ET le sauver dans un fichier JSON.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      SI (pas de réseau)
      charger fichier
      SINON
      internet
      (algo raffinable si l'heure de la MaJ des données est connue)
    • sauvegarder certaines des données dans une BDD
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    Pour mon application j'avais utilisé cette librairie qui est simple. C'est pas vraiment un ORM complet mais ca simplifie pas mal de choses. Elle n'a plus trop l'air maintenue mais ça marche bien :

    http://blogdebenoit.wordpress.com/20...dataframework/

    Sinon j'étais tombé sur cette autre librairie qui a l'air très intéressante mais que je n'ai pas eu l'occasion d'essayer :

    http://datadroid.foxykeep.com/

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Enfin, pour moi, ça dépend de ce que tu veux vraiment sauvegarder (objets, données, états ...) et du format de ce que tu veux sauvegarder.

    Ce sont des données sous format JSON que tu reçois, soit.
    Pour moi, tu as deux solutions :
    • parser le flux (pour avoir les données, comme tu le fais déjà sans doute) ET le sauver dans un fichier JSON.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      SI (pas de réseau)
      charger fichier
      SINON
      internet
      (algo raffinable si l'heure de la MaJ des données est connue)
    • sauvegarder certaines des données dans une BDD
    Ce sont bien des données en JSON que je reçois. C'est assez simple, je reçois une personne, des comptes et des informations sur les comptes (des positions en actions par exemple).

    J'ai pensé à la même chose que toi en ce qui concerne la sauvegarde dans un fichier JSON et actuellement ça conviendrait tout à fait. Mais à l'avenir peut être que la quantité de données stockées va augmenter, dans ce cas ce serait peut être mieux d'avoir une base de donnée qui contient les informations et de l'interroger quand j'ai besoin de quelque chose, plutôt que de devoir parser tout mon fichier JSON, tout charger en mémoire (et on sait à quel point il faut épargner la mémoire en Mobile) pour uniquement obtenir 1 donnée.

    C'est pour ça que j'aimerais anticiper les besoins et peut être partir vers une solution SQLite même si c'est un peu laborieux actuellement.

    La question n'est pas simple et mérite réflexion avant de se lancer tête baissée dans le projet :-)

    Merci pour ton aide !

    Citation Envoyé par Guybrush34 Voir le message
    Pour mon application j'avais utilisé cette librairie qui est simple. C'est pas vraiment un ORM complet mais ca simplifie pas mal de choses. Elle n'a plus trop l'air maintenue mais ça marche bien :

    http://blogdebenoit.wordpress.com/20...dataframework/

    Sinon j'étais tombé sur cette autre librairie qui a l'air très intéressante mais que je n'ai pas eu l'occasion d'essayer :

    http://datadroid.foxykeep.com/
    Merci mais je ne pense pas que mon patron acceptera que j'utilise des librairies non maintenues.

    Lionel

  10. #10
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    C'est bien d'anticiper les besoins, mais ce fichier JSON, s'il évolue bien, deviendra-t-il plus, ou moins conséquent ?
    Est-ce que les personnes responsables des données envisagent, un jour, d'augmenter la taille (bon ... même avec un "non", ça ne voudra pas forcément dire non, mais bon ...) ?

    De plus, je ne sais pas la complexité de ton fichier, mais l'ouvrir et le parcourir ne prend normalement pas beaucoup de temps, même sur de vieux smartphone. Je te conseils de faire des tests de monté en charge, avec un fichier (ou plusieurs) faisant 10 ou 100 fois la taille de ton JSON actuellement.
    Avec ton smartphone test, tu verras si ça le temps mis est :
    -notable
    -remarqué
    -un vrai problème
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

Discussions similaires

  1. Quel type de stockage de données ?
    Par JoeBurtonn dans le forum Débuter
    Réponses: 2
    Dernier message: 01/12/2007, 22h02
  2. quel type de donnée choisir pour simuler le type Currency
    Par maamar1979 dans le forum Débuter
    Réponses: 2
    Dernier message: 18/02/2007, 12h44
  3. quel type de donné renvoie un socket
    Par sneb5757 dans le forum Développement
    Réponses: 4
    Dernier message: 18/11/2006, 18h06
  4. Réponses: 15
    Dernier message: 07/07/2006, 16h30
  5. Champ PRIX : quel type de donnée ?
    Par Ant8386 dans le forum Oracle
    Réponses: 3
    Dernier message: 28/06/2006, 16h05

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