Puisque je savais que le projet utiliserait le Framework Kivy, j’ai commencé à me familiariser avec Python et Kivy. J’ai donc fait une application pour tester les différentes fonctionnalités dont nous aurons besoin pour le projet. J’ai eu de nombreux problèmes avec la gestion de données et avec l’appareil photo. La documentation de Kivy est très minimale et les forums ne sont pas très fréquentés comparativement à ceux d’Android Studio ce qui fait en sorte que les problèmes étaient long à résoudre.
Entre la première et la deuxième rencontre, j’ai continué d’expérimenter
avec Kivy surtout avec les données GPS. Les nombreux problèmes
rencontrés m’ont incité à essayer React Native comme plateforme que Paul
nous a proposer. React Native avait l’avantage d’être une plateforme
valide pour IOS et Android.
Mon expérience avec React Native a été très négative puisque je possède
très peu d’expérience avec JavaScript. Bien que j’aie réussi à faire une
application de base, je n’avais pas l’impression d’être productif.
Suite à ces essais nous avons décidé d’utiliser Android Studio pour la
version Android.
Au cours de la fin de semaine, je me suis habitué au code source fourni
par Lena. J’ai pu comprendre quels étaient les éléments que je devrais
modifier.
L’analyse du code fourni m’a permis de voir que la gestion de données
étaient compliquée ce qui avait empêché les anciens développeurs
d’implémenter les fonctions de tri (entre autre).
Au cours de la dernière réunion, le professeur Guy Lapalme a insisté sur
le développement des fonctionnalités essentielles de l’application.
J’avais donc planifié de réorganiser le traitement des données.
Malheureusement, mon ordinateur a cessé de fonctionner et j’ai perdu une
semaine à essayer de le réparer avant d’acheter un nouveau portable.
Durant cette période, j’ai travaillé à ce que l’application ait chercher
ses données à partir d’un fichier JSON contrairement à une base de
données SQL puisque c’est ce que nous avions convenu.
J’ai dû prévoir 4 scénarios pour la gestion des données, avec ou sans
connexion internet et avec ou sans données déjà sauvegardées sur le
téléphone. Le but étant de mettre les données à jour sans écraser ce que
l’utilisateur a sauvegardé (note, photo, commentaire).
Afin de limiter le parsing des données, lors de l’ouverture de
l’application, dépendant le scénario, une liste de toute les œuvres est
créée et elle sera passée à toutes les activités. L’avantage d’avoir les
données sous forme de liste permet de d’accéder aux données très
rapidement et de garder un suivi de l’ordre de la liste malgré les
changements d’activités.
Durant cette période, j’ai implémenté les fonctions de tri. Le principal problème rencontré a été de mettre à jour l’interface une fois que le tri a été effectué. J’ai également travaillé sur le transfert des données entre les activités. Le passage des données est fait par la classe Parcel via les intents pour des raisons d’efficacité. L’implémentation des parcelles a été problématique puisque tous les objets non primitifs doivent être transformés. J’ai dû revoir la structure des données puisque les objets œuvre avaient une référence vers un objet artiste et vice-versa ce qui créait une boucle infinie. J’ai réussi à implémenter le transfert de données entre deux classes.
Durant cette semaine, j’ai continué de travailler sur le transfert de données entre les différentes activités et fragments. La problématique était qu’il y avait énormément de changement entre les différentes activités et fragments. Malgré le fait que les parcelles étaient ‘efficace’ parfois le transfert ne se faisait pas assez vite et les activités recevaient des parcelles nulles ce qui engendraient des erreurs d’exécution. J’ai beaucoup travaillé sur réduire le nombre d’activités et de fragments et à régulariser les appels de chacun donc d’envoyer des flags et toujours les mêmes paramètres.
Durant cette semaine, j’ai trouvé la solution à mon problème de gestion de données. J’ai implementé un ROOM database pour gérer les données. Avec le database, j’ai réglé deux problèmes soit la transfert de données et la gestion de données. Le database me permet d’aller rechercher les données si le transfert a été trop lent et permet de storer les données de manière plus simple que sous le format JSON. Le format ROOM a été préféré à SQL car il a un niveau d’abstraction de plus que SQL ce qui permet d’éviter les curseurs. J’ai travaillé à construire mes requêtes et à enregistrer les informations de l’utilisateur dans la base de données.