Dag medetweakers, voor mijn opleiding ben ik bezig de wondere wereld van native android development uit te vogelen. Om dit voor mijzelf context te geven heb ik een appje bedacht dat ik graag zou willen maken. De app is redelijk eenvoudig in opzet:
- Een gebruiker kan met een druk op de knop een willekeurig land genereren/kiezen
- De app toont op een kaart informatie over het land, en in cardviews wordt straks informatie getoond over het land dat via verschillende publieke apis wordt opgehaald
Vervolgens kan een gebruiker de traditionele gerechten van een land zien, en hier recepten van opvragen. Vervolgens kan de gebruiker wanneer hij een gerecht gemaakt heeft dit invoeren in de app en historisch terugzien wat hij/zij allemaal heeft gegeten door middel van de app.
Het idee is om de culinaire horizon te verbreden
TLDR
Dat gezegd hebbende, ik loop tegen een aantal pijnpunten aan bij het ontwikkelen van de app. Ik weet niet of dit komt omdat mijn implementatie gebrekkig is, of dat de manier waarop ik het probeer te doen gewoon niet aan te raden is.
Het volgende:
Om de land en gerecht informatie op te slaan gebruik ik een lokale sqlite database. Hiervoor heb ik een database helper klasse geschreven die de objecten wegschrijft naar database en ook weer ophaalt.
Wanneer de app start wordt een lijst met landen en gerechten uit de database opgehaald en in een arraylist gezet. Omdat ik dit niet voor elke activity opnieuw wil hoeven doen, en de 'putextra' methode van een intent me wat gebrekkig leek, heb ik alle data die gedeeld moet worden in een statische singleton klasse gezet. Iedere activity vraagt vervolgens een instantie van de singleton op en heeft zo toegang tot de opgehaalde data.
Het probleem is dat je altijd een context mee moet geven aan de singleton en aan ook aan de database helper. Bij het starten van mijn mainactivity roep ik nu een zelfgeschreven functie aan op de singleton die de context van de mainactivity in een variabele opslaat. De singleton geeft deze vervolgens ook weer door aan de databsehelper klasse.
Probleem is dat bij het herstarten van een activity (bijvoorbeeld bij het veranderen van portrait naar landscape) de app altijd crasht met 'out of memory' achtige errors.
Na wat onderzoek op het internet heb ik een vermoeden dat dit komt omdat ik dus een copy van mijn context bewaar, en deze door de garbage collector dus niet wordt vernietigd.
Mijn vraag is eigenlijk, is mijn opzet met singletons aan te raden/ gebruikelijk binnen het android landschap?
Sorry voor het lange verhaal
Volledige broncode is te vinden op:
https://github.com/nilsk123/CulinaryWorldTour.git
- Een gebruiker kan met een druk op de knop een willekeurig land genereren/kiezen
- De app toont op een kaart informatie over het land, en in cardviews wordt straks informatie getoond over het land dat via verschillende publieke apis wordt opgehaald
Vervolgens kan een gebruiker de traditionele gerechten van een land zien, en hier recepten van opvragen. Vervolgens kan de gebruiker wanneer hij een gerecht gemaakt heeft dit invoeren in de app en historisch terugzien wat hij/zij allemaal heeft gegeten door middel van de app.
Het idee is om de culinaire horizon te verbreden
TLDR
Dat gezegd hebbende, ik loop tegen een aantal pijnpunten aan bij het ontwikkelen van de app. Ik weet niet of dit komt omdat mijn implementatie gebrekkig is, of dat de manier waarop ik het probeer te doen gewoon niet aan te raden is.
Het volgende:
Om de land en gerecht informatie op te slaan gebruik ik een lokale sqlite database. Hiervoor heb ik een database helper klasse geschreven die de objecten wegschrijft naar database en ook weer ophaalt.
Wanneer de app start wordt een lijst met landen en gerechten uit de database opgehaald en in een arraylist gezet. Omdat ik dit niet voor elke activity opnieuw wil hoeven doen, en de 'putextra' methode van een intent me wat gebrekkig leek, heb ik alle data die gedeeld moet worden in een statische singleton klasse gezet. Iedere activity vraagt vervolgens een instantie van de singleton op en heeft zo toegang tot de opgehaalde data.
Het probleem is dat je altijd een context mee moet geven aan de singleton en aan ook aan de database helper. Bij het starten van mijn mainactivity roep ik nu een zelfgeschreven functie aan op de singleton die de context van de mainactivity in een variabele opslaat. De singleton geeft deze vervolgens ook weer door aan de databsehelper klasse.
Probleem is dat bij het herstarten van een activity (bijvoorbeeld bij het veranderen van portrait naar landscape) de app altijd crasht met 'out of memory' achtige errors.
Na wat onderzoek op het internet heb ik een vermoeden dat dit komt omdat ik dus een copy van mijn context bewaar, en deze door de garbage collector dus niet wordt vernietigd.
Mijn vraag is eigenlijk, is mijn opzet met singletons aan te raden/ gebruikelijk binnen het android landschap?
Sorry voor het lange verhaal
Volledige broncode is te vinden op:
https://github.com/nilsk123/CulinaryWorldTour.git