5. Listák, adat-perzisztencia

5.1. Listák létrehozása és haszálata

lista egy olyan adatszerkezet, amely több hasonló adatot, objektumot tárol egyszerre (példa: kontakt lista, bevásárlólista, osztálynévsor, stb.).

A listákat változókban tároljuk, ezért ha listával akarunk dolgozni, akkor először egy változót kell létre hoznunk A Variables fiókban található Initialize global to blokkal, majd a változóba kell töltenünk a listaelemeket a következő két módszer egyikével:

 
img027 - 5.1 - 1.png

A listák tartalmát könnyen megjeleníthetjük a ListView vagy sima Label komponensel.

img028 - 5.1 - 2.png

A lista eleme lehet szöveg, szám vagy logikai érték.

 

Remove List Item blokkot használhatjuk arra, hogy egy lista elemét töröljük. 

ListView.SelectionIndex mondja meg, hogy épp melyik elem van kijelölve a ListView komponensben.

ListView.AfterPicking esemény akkor következik be, ha rábökünk egy listaelemre a ListView komponensben.

For each item in list do blokk végigmegy a list minden elemén.

Egy adott elem elérése egy listában a sorszáma alapján a Select list item blokkal lehetséges.

 

5.1.1. feladat
 

Írjunk egy bevásárlólista alkalmazást! Egy TextBox beviteli mezőben adhassuk meg a tételeket, a Hozzáad gomb adja hozzá a listához a bevitt tételt. Legyen egy másik gomb is a képernyőn, amely törli a teljes listát. Ha rábökünk egy listaelemre, töröljük azt az elemet!

download.png

5.1.2. feladat
 

Módosítsuk úgy a feladatot, hogy a bevitt tételek automatikusan sorszámozódjanak. Figyeljük meg, hogy mi történik a sorszámokkal, ha listaelemeket törlünk. Hogyan kellene orvosolni a problémát?

img029 - 5.1 - 4.png

5.1.3. feladat
 

Módosítsuk úgy a feladatot, hogy a bevitt tételek sorbarendezhetőek legyenek a Rendezés gombra kattintva.

img030 - 5.1 - 5.png

Egy kis segítség a sorbarendezés implementálásához: https://www.youtube.com/watch?v=lyZQPjUT5B4

 
 
img028 - 5.1 - 3.png

5.2. Adat-perzisztencia

 

A legtöbb alkalmazás két munkamenet között elmenti a készülék memóriájába az általa kezelt adatokat. Az adatok ilyesfajta megőrzését adat-perzisztenciának hívják. Például egy kapcsolat-listát kezelő vagy jegyzetelő alkalmazásban elengedhetetlen, hogy a kezelt adatok megmaradjanak akkor is, ha a készüléket újraindítjuk.

A számítógépek az adatokat fájlokban vagy adatbázisokban tárolják. Az adatbázisok olyan speciális fájlok és programok, amelyek úgy vannak megtervezve, hogy az adatok lehetőleg leghatékonyabban legyenek eltárolhatók és visszakereshetők. Pl. a bankok adatbázisokban tárolják az ügyfelek listáit, tranzakcióit, egyenlegét. A facebook adatbázisokban tárolja a felhasználókat és azok posztjait, kommentjeit. Az AppInventor adatbázisban tárolja a felhasználók által készített programokat.

Az AppInventor-ban a File komponens segítségével tudunk fájlba adatot írni, illetve a lementett adatot visszaolvasni és módosítani. A TinyDB és TinyWebDB komponens segítségével kulcs-érték párokat tudunk elmenteni a készülékünkre, vagy a felhőbe.

 

Alkalmazás-elszigetelés fogalma: biztonsági megfontolásból minden alkalmazás a saját kis "homokozójában" játszik: ez azt jelenti, hogy speciális jogosultságok hiányában az alkalmazás csak a saját fájljait írhatja-olvashatja.

 
 

5.3. A File komponens

File nem-vizuális komponens a Strorage komponens-csoportban található, segítségével fájlokat tárolhatunk el az alkalmazásunk privát mappájában (sandbox), vagy az SD kártyán. Más alkalmazás fájlait is olvashatjuk a megfelelő jogosultság birtokában. A főbb műveletei a következők:

  • SaveFile - elmenti a paraméterként kapott szöveget a megadott nevű állományba. Ha nem létezik az állomány, létrehozza azt, egyébként felülírja a tartalmát. Ha a fájlnév elé egy perjelet ("/") rakunk, akkor az állomány az SD kártyán jön létre.

  • DeleteFile - törli a megadott állományt.

  • AppendToFile - szöveg hozzáfűzése már létező fájlhoz. A működése hasonló a SaveFile művelethez, csak a fájl felülírása helyett hozzáfűzi a kapott szöveget.

  • ReadFrom - megnyitja a megadott állományt és szöveget olvas be belőle. A sikeres beolvasás kiváltja a GotText eseményt.

 

5.3.1. feladat

Készítsünk egy alkalmazást, amelyben egy TextBox mezőbe szöveget vihetünk be és annak tartalmát elmenthetjük egy állományba majd vissza is olvashatjuk.

img031 - 5.2 - 1.png
download.png
download.png

5.3.2. feladat
 

Fejlesszük tovább az 5.1.1 feladatban elkészített bevásárlólista alkalmazást úgy, hogy minden új tétel hozzáadásakor mentsük el a bevásárlólistát. Az alkalmazás indításakor pedig töltsük be azt. 

Tipp: használjuk a list to CSV row és list from CSV row blokkokat.

 

5.4. A TinyDB komponens

TinyDB komponens szintén a Storage csoportban található, segítségével szintén adatokat tudunk eltárolni a készülékünkön és azokat később visszaolvasni, ezúttal nem szöveges formában, hanem kulcs-érték párok formájában. Alkalmazásonként csak egy ilyen komponens használható. 

kulcs-érték párokban a kulcs mindig szöveg (text) formátumú, az a feladata, hogy azonosítsa az adatot, az érték pedig hordozza a kulcshoz tartozó értéket, ami bármilyen típusú (szöveg, szám, logikai, lista) lehet. A kulcsnak egyedinek kell lennie.

A komponens fő metódusai a következők:

  • StoreValue - kulcs-érték pár eltárolása,

  • GetValue - érték visszaolvasása a kulcs alapján. Alapértelmezett érték is megadható, ha a kulcs nem található meg,

  • GetTags - a tárolt kulcsokat adja vissza,

  • ClearTag - törli a kulcs által megadott értékpárt,

  • ClearAll - törli az összes tárolt párt.

 
 

5.4.1. feladat


Készítsünk egy telefonkönyv alkalmazást, amelyben nevekhez telefonszámokat tárolhatunk el. Az eltárolt telefonszámok legyenek visszakereshetők név alapján. 

download.png
img032 - 5.2 - 2.png
 

5.4.2. feladat


Bővítsük a telefonkönyv alkalmazást úgy, hogy a telefonszám mellett az email cím is el legyen tárolva. 

img033 - 5.2 - 3.png

Tipp: használjuk ki azt, hogy a kulcs-érték párban az érték lista is lehet.

download.png
 

5.4.3. feladat


Bővítsük a telefonkönyv alkalmazást úgy, hogy az eltárolt telefonszámot hívhassuk is. 

download.png

Tipp: használjuk a PhoneCall komponenst.

 

5.4.4. feladat


Bővítsük a telefonkönyv alkalmazást úgy, hogy az eltárolt telefonszámra küldhessünk SMS-t.

download.png

Tipp: használjuk a Texting komponenst.

5.5. Többképernyős alkalmazások

Eddig olyan alkamazásokat készítettünk, amely egy képernyőből állnak. Összetettebb alkalmazásoknál ez komoly korlátozás: használhatóbb és jobb felhasználói élményt nyújtó alkalmazásokat készíthetünk, ha azok funkcióit több képernyő felhasználásával tervezzük és valósítjuk meg.

 

Alapértelmezésben egy képernyő tartozik az alkalmazásunkhoz, aminek a neve Screen1. Ezt a nevet nem tudjuk megváltoztatni. Lehetőség van viszont további képernyőket hozzáadni az alkalmazáshoz, vagy később azokat törölni. Minden képernyőhöz saját tervező- és blokk-nézet tartozik. Egy lenyíló listában jelennek meg a létrehozott képernyők, ebből tudjuk kiválasztani, hogy melyik képernyővel akarunk dolgozni.

 

A képernyők kezeléséhez a következő parancsok állnak rendelkezésre:

 
img034 -5.5 - 1.png

Ezekkel:

  • meg tudunk nyitni egy adott nevű képernyőt

  • meg tudunk nyitni egy adott nevű képernyőt és át tudunk adni egy értéket

  • A képernyőn fel tudjuk használni a megnyitáskor átadott értéket

  • be tudjuk zárni az adott képernyőt

  • be tudjuk zárni az adott képernyőt és vissza tudunk adni egy értéket

  • be tudjuk zárni a teljes alkalmazást.

A képernyők fontosabb eseményei:

  • Initialize: akkor következik be, miután megnyitottuk az adott képernyőt

  • BackPressed: visszalépünk az adott képernyőről a Back gombbal

  • OtherScreenClosed: egy másik képernyő be lett zárva és visszakerültünk erre a képernyőre

5.5.1. feladat


Írjuk át a telefonkönyv alkalmazásunkat többképernyős alkalmazássá.

download.png
 
img041 - 5.5 - 1.jpg

5.5.2. feladat


Módosítsuk az 5.5.1 feladatban elkészített alkalmazást úgy, hogy a kapcsolatunk postacímét és tárolja.

download.png