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.