jok Posté(e) 6 août 2013 Share Posté(e) 6 août 2013 (modifié) Bonjour, Suite à l'adaptation d'une application iOS sur Android, je suis amené à parser un fichier .plist pour récupérer une liste de produits. Pour cela, j'utilise cette bibliothèque qui fonctionne très bien. Pour ceux qui ne connaissent pas bien le contenu des .plist, cela ressemble à du XML standard. Voici un exemple concret : <plist version="1.0"> <array> <dict> <key>ID</key> <string>ID01</string> <key>Title</key> <string>Le titre du produit 1</string> ... </dict> <dict> <key>ID</key> <string>ID02</string> <key>Title</key> <string>Le titre du produit 2</string> ... </dict> </array> </plist> Après avoir parsé le .plist, j'aurais besoin de stocker son contenu (ID, Title, etc.) et d'accéder aux informations d'un seul produit sans avoir à parser le fichier plusieurs fois. Du coup, je me demande ce qu'il y aurait de plus optimisé pour cela : ArrayList ? Map ? HashMap ou autre ? J'avoue que je suis un peu perdu malgré la consultation de la Doc Android. Pour un exemple d'utilisation : - Parsage au lancement de l'application,- Affichage d'une Activity avec la liste des produits, - Au tap sur un produit, affichage d'une nouvelle Activity avec les détails du produit. Si je ne suis pas clair, n'hésitez pas à me le faire savoir. En vous remerciant d'avance pour votre précieuse aide ! Modifié 8 août 2013 par jok Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 6 août 2013 Share Posté(e) 6 août 2013 Je pense que le plus adapté serait de passer par une base de données. Au premier lancement de l'application, la base n'existant/étant vide, on parse le ficher pour remplir la base Ensuite, les Activities peuvent aller chercher les informations dans la base pour l'affichage; il est assez simple d'afficher le contenu d'une table dans une ListView par ex. ; et échanger un objet Java complexe/volumineux (un tableau, une Map, ...) est tout sauf simple/n'est pas recommandé 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
jok Posté(e) 8 août 2013 Auteur Share Posté(e) 8 août 2013 Merci pour ta réponse ! Donc je pars sur du SQLite alors.Ah oui, autre chose... Je compte parser le fichier pour remplir la base de données à chaque fois que je lance l'application et qu'il y a une connexion Internet, mais est-ce que cela prendrais du temps selon toi de supprimer la table et de la recréer en cas de changements dans ce .plist ou vaut-il mieux comparer chaque item et voir si quelque chose à changé ? Je ne me rends pas compte au niveau de la consommation de ressources... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 8 août 2013 Share Posté(e) 8 août 2013 Difficile de te faire une réponse précise; tout dépend de la complexité et du volume de tes données. Point de vue implémentation, il est sans doute plus simple à chaque fois de vider la table (pas besoin de la supprimer), parser le fichier et insérer les données; point du vue efficacité, il serait préférable de ne mettre à jour que ce qui est nécessaire (mais cela nécessite de pouvoir détecter seulement les changements dans les données à parser) Petit conseil supplémentaire: Android imposant que les communications réseaux (et voire aussi les manipulations BDD) se fasse de manière non bloquante par rapport à l'IHM (donc dans un thread dédié), il serait je pense opportun que tu implémentes un Service qui se charge de la récupération / parsing du plist / insertion en BDD. Ce service serait appelée par ton Activity lorsque celle-ci est activée 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
jok Posté(e) 8 août 2013 Auteur Share Posté(e) 8 août 2013 Je comprends, je verrai ça en tant voulu alors. Tu m'enlèves une énorme épine du pied, y compris pour l'utilisation d'un Service car je me rends compte qu'AsyncTask n'est pas top pour ce que je veux faire : l'utilisateur est obligé d'attendre que tous les produits soient chargés pour les consulter, alors que l'idéal est bien entendu que tout se fasse en tâche de fond.Merci beaucoup pour ton aide, et si tu as d'autres conseils supplémentaires n'hésite pas, je suis toujours preneur ! :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.