13. Aktivita 9 - ukládání dat na paměťové kartě "storage"

Téma

Tematický celek

Použití komponent pro ukládání dat na kartě / disku, a jejich načtení.

Motivační rámec

Seznámení s důležitým aspektem programování, ukládání a načítáním dat do non-volatilní paměťi.

Počet žáků

5-15

Věk žáků

10+

Pomůcky

PC odpovídajících parametrů,
webový prohlížeč Mozilla Firefox nebo Google Chrome,
zařízení s Androidem připojené k internetu,
případně emulátor zařízení s Androidem,
účet pro Google služby.

Stručný popis aktivity

Přihlášení k prostředí App Inventoru http://appinventor.mit.edu/
Praktické vyzkoušení ukládání dat a jejich načtení v prostředí App Inventor.

Vhodné místo

Počítačová učebna

Cíle aktivity

Studenti se seznámí a vyzkouší si použití cyklů programu.

Předchozí znalosti

Aktivita navazuje na předchozí lekci tohoto kurzu.

Časový plán

Fáze činnosti s přístrojem

Metody a formy, motivace

5-25m

Seznámení s tématem lekce. Volitelně teorie o ukládání dat v PC (složky, soubory, databáze). Volitelně ukázka modelové aplikace a popis jednotlivých bloků, týkajících se práce s daty. 

Volitelně samostatná činnost žáků, vyhledávání informací k tomuto tématu.

Frontální výklad, ukázka, samostatná práce žáků

30-60m

Analýza, úpravy a modifikace modelové aplikace, volitelně zakomponování funkcí pro ukládání a načítání dat do vlastní aplikace.

Samostatná a skupinová práce s využitím získaných znalostí, infromací v tomto kurzu a externích zdrojů.

15-20m

Prezentace prací žáků, sdílení poznatků, diskuze.
Motivace žáků k domácí práci.

Prezentace prací a diskuze

Hodnocení

Zpětná vazba je okamžitá. Student reflektuje vzdělávací cíle, svůj postup a dosažené výsledky. Student průběžně srovnává vlastní výsledky s výsledky ostatních studentů.

Návaznosti

Na tuto aktivitu navazují následující aktivity, které prohlubují a kombinují znalosti prostředí App Inventoru.

Poznámky

Pro případ výpadku připojení k internetu nebo technických problémů s App Inventorem doporučuji připravit záložní aktivitu, založenou na podobných principech blokového programování, například offline aplikaci MIT Scratch, BYOB nebo některou z variant programovacích prostředí LOGO.

Wikipedie k tématu ukládání dat.

Doplňkový tutoriál s aplikací malování. Práce s canvas, sprites, více obrazovek, vlastní procedury, ukládání dat. 

Popis komponent storage. 

Aplikace využívající ukládání a načítání dat z paměťové karty

AI2 používá k ukládání a načítání dat několik komponent. V ukázkové aplikaci budeme používat dvě komponenty. TinyDB a File. TinyDB je databáze vázaná ke konkrétní aplikaci. Protože všechny aplikace spouštěné z AI2 pomocí AI Companion jsou z pohledu systému jedna aplikace, je třeba pro ukládání do TinyDB dostatečně unikátní slova, aby si aplikace navzájem nepřepisovaly data. Storage file umožňuje ukládat data do souborů přímo do souborového systému.

Rozšíříme funkce aplikace z aktivity 6 o ukládání skóre hráčů a uložení snímku aplikace. Většina kódu aplikace zůstala stejná, bloky, které byly změněny nebo doplněny, jsou v této ukázce.

V minulé aktivitě bylo zmíněno, že jednotlivé screeny nesdílí proměnné. Sdílení proměnných mezi screeny se dá vyřešit právě pomocí TinyDB.

Komponenty modelové aplikace

U komponent se mnoho nezměnilo. Tlačítko Restart bylo přesunuto vlevo dolů a přibyla tlačítka Pause a Save. Významnou změnou jsou však komponenty TindyDB1 a File1.

pamai_a090_storage_components.png

Inicializace a načtení dat z databáze

Protože nelze proměnné inicializovat přímo hodnotami z databáze, je konstrukce následující. Nejdříve jsou vytvořeny globální proměnné. Následně, v bloku when Screen1.Initialize  jsou načteny a předány hodnoty z databáze. Pokud by v databázi požadavaná data nebyla, použije se výchozí hodnota z valueTagNotThere. Na závěr inicializace jsou hodnoty zapsány do LabelUfo1Skore a LabelUfo2Skore. 

pamai_a090_storage_blocks1.png

Bloky využívající ukládání dat a mazání dat

Blok when ButtonRestart.click řeší vynulování obsahu globálních proměnných, zobrazení dat v LabelUfo1Skore a LabelUfo2Skore a stará se i o smazání dat v databázi. 

When ButtonSave.Click volá proceduru ulozit_skore, která zapíše hodnoty globálních proměnných do databáze. V databázi jsou hodnoty uloženy pod názvem (tagem) Ufo1_skore a  Ufo2_skore. 

V obsluze tlačítka Pause se kromě uložení skóre řeší vyrobení snímku obrazovky, jeho uložení na disk do souboru /AppInventor/SpaceMining.png uložení cesty a názvu do databáze  a otevření obrazovky ScreenPause. Cesta 

pamai_a090_storage_blocks2.png

Design obrazovky ScreenPause

Většinu plochy zabírá komponenta Canvas1, ve které se budou zobrazovat screenshoty hry, před jejím pozastavením. Za povšimnutí stojí opětovné zařazení komponenty TinyDB. Pro každý screen, ve kterém se bude pracovat s uloženými daty v databázi, je třeba znovu přidat komponentu TinyDB.

pamai_a090_storage_pause_desing.png

Bloky obrazovky ScreenPause

Obsluha tlačítka Pokračovat nepoužívá otevření obrazovky Screen1, ale zavírá sama sebe. Kdyby tomu tak nebylo, vznikal by cyklus, který by znesnadňoval použití systémového tlačítka Zpět.

Blok when ScreenPause.Initialize řeší zobrazení skóre hráčů, načtení a zobrazení screenshotu z předchozí obrazovky.

pamai_a090_storage_pause_blocks.png

Tipy na modifikace programu:

  • záznam více údajů, (např. životů, počet srážek, souřadnice lodi a její směr), uložení, načtení a zobrazení těchto údajů,
  • ukládání snímků pomocí dalšího tlačítka,
  • na obrazovce ScreenPause prohlížení uložených screenshotů,
  • přihlašování ke hře, zapamatování jmen hráčů a jejich skóre,
  • zobrazování jmen hráčů, místo názvů UFO1 UFO2,
  • výběr lodí, jejichž parametry (obrázek, rychlost pohybu, ...) by byly načítány z databáze.