Példaprogramok Android alá (Lista, mentés, visszatöltés, pattogó android figura) Android alapok Android játékfejlesztés Godinek László
Tartalomjegyzék 1 Mentés... 1 1.1 A fájlmentésről röviden... 1 1.2 Fájl mentése a belső tárolóra... 1 2 Visszatöltés... 4 3 Lista... 6 3.1 Alapműveletek a listán... 6 4 Pattogó android figura... 9 4.1 A program rövid leírása... 9 4.2 Programkód bemutatása... 9
1 Mentés 1.1 A fájlmentésről röviden A legtöbb androidos programnál létfontosságú az adatok mentése. Gondoljunk csak arra, hogyha valamit módosítunk a beállításon, akkor a programnak ezt meg kell jegyeznie, hogy a következő induláskor ne az alapbeállítással startoljon, hanem ezzel a megváltoztatott paraméterrel. Ezenkívül számtalan példát lehetne hozni, de lássuk, hogy miként működik a fájlok mentése android operációs rendszeren. Minden androidot használó eszköznek létezik belső és külső tárolója. A belső tárolót a gyártók beleépítik az eszközbe, és ezt nem lehet eltávolítani. Ezzel szemben a külső tároló lehet egy SD kártya, mely kivehető az eszközből. Viszont vannak olyan készülékek, melyek csak egy beépített tárolóval rendelkeznek, és nincs lehetőség a bővítésre. Ezeknél szintén megtalálható a belső és külső tároló, itt a beépített tárolót két partícióra osztják. Belső tároló tulajdonságai: mindig rendelkezésre áll, az ide mentett fájlokat alapbeállítás szerint csak az a program érheti el, amelyik elmentette azt, a program eltávolításánál a rendszer az összes ehhez tartozó fájlt letörli a belső tárolóról. Külső tároló tulajdonságai: nem áll mindig rendelkezésre, mivel a felhasználó a külső tárolót USB-ként is működtetheti, és ebben az esetben az eszköz nem használhatja, a külső tárolóra mentett fájlokhoz bárki hozzáférhet, a program eltávolításánál nem minden esetben törlődnek a hozzá tartozó fájlok. A következőkben a belső tárolóra való fájlmentés lesz bemutatva. 1.2 Fájl mentése a belső tárolóra Az alábbi kódrészlet segítségével menthető egy string. 1. String filename = "myfile"; 2. String string = "Hello world!"; 3. FileOutputStream outputstream; 4. 5. try { 6. outputstream = openfileoutput(filename, MODE_PRIVATE); 7. ObjectOutputStream out = new ObjectOutputStream(outputStream); 8. out.writeobject(string); 9. out.flush(); 10. out.close(); 11. } 12. catch (Exception e) { 13. e.printstacktrace(); 14. } 1-> fájlnév megadása, 2-> string, amit a fájlba szeretnénk írni, 3-> csatorna létrehozása íráshoz, 6-> fájl megnyitása a megadott paraméterekkel, 1
7-> csatorna létrehozása íráshoz, mely segítségével objektumokat, és alap típusokat írhatunk (int, char, stb..), 8-> string kiirása, 10-> a megnyitott csatorna lezárása. Hozzunk létre egy új android projektet, majd másoljuk be a kódrészletet. Két helyen hibát fog jelezni, itt csak annyi a dolgunk, hogy a hiányzó részletet importáljuk, kattintsunk a sor elejére, majd import. 1. ábra Mentés Futtatás után a következőképpen tudjuk ellenőrizni, hogy a program elmentette-e a fájlt: A File Explorer alatt lépjünk be a data/data mappába, majd keressük meg a projekt nevét, nyissuk le a files mappáját, és ha sikeres volt a mentés, akkor ott megtalálható a fájl. Megnyitni viszont csak akkor tudjuk, ha átmásoljuk a számítógépre. 2. ábra DDMS megnyitása 2
3. ábra Mentett fájl megtekintése Kattintsunk a jobb felső ikonra, majd válasszuk ki, hogy hova mentse a fájlt. Megnyitás után ellenőrizhető a tartalma. 3
2 Visszatöltés Egészítsük ki a programot a következő kódrészlettel: 1. FileInputStream inputstream; 2. try { 3. inputstream = openfileinput(filename); 4. ObjectInputStream in = new ObjectInputStream(inputStream); 5. String tmp = ""; 6. tmp = (String)in.readObject(); 7. in.close(); 8. textview1.settext(tmp); 9. } 10. catch (Exception e) { 11. e.printstacktrace(); 12. } 1-> csatorna létrehozása olvasáshoz, 3-> fájl megnyitása olvasásra, 4-> csatorna létrehozása olvasáshoz, mely segítségével objektumokat, és alap típusokat olvashatunk (int, char, stb..), 5-> tmp tároló string létrehozása 6-> fájl tartalmának belemásolása a tmp stringbe 7-> fájl lezárása 8-> tmp string tartalmának megjelenítése egy textviewben Ahhoz, hogy a beolvasás látható legyen, definiálni kell egy textviewt, melybe belemásoljuk a már kiolvasott fájl tartalmát a stringből. Ezt tartalmazza a 8. sor. A teljes kódrészletet ehhez még plusz két sorral kell kiegészíteni, melyek a következők: Textview textview1; textview1 = (TextView)findViewById(R.id.textView1); 4
Beszúrás után: 4. ábra Visszatöltés 5
3 Lista A listában az elemek sorban helyezkednek el, így minden egyes elemre egy indexel lehet hivatkozni. Az első elem a lista 0. helyén található. Listát a következő parancs segítségével tudunk létrehozni: ArrayList<String> listaneve = new ArrayList<String>(); 3.1 Alapműveletek a listán 1. elem hozzáadása a lista végéhez 2. elem hozzáadása a lista egy meghatározott helyére 3. elem törlése 4. az összes elem törlése a listáról 5. lista másolása 6. keresés a listában 7. adott helyen levő elem lekérése 8. adott helyen levő elem lecserélése 9. a listában található elemek számának lekérése 1. Elem hozzáadása a lista végéhez listaneve.add("valami"); 2. Elem hozzáadása a lista egy meghatározott helyére (az az elem, amelyiknek a helyére beszúrjuk, eggyel jobbra csúszik, és a mögötte levők szintén) listaneve.add(3,"valami"); 3. Elem törlése meghatározott indexről listaneve.remove(3); 4. Összes elem törlése a listáról listaneve.clear(); 5. Lista másolása listaneve.clone(); 6. Keresés a listában listaneve.contains("valami"); 6
7. Adott helyen levő elem lekérése listaneve.get(3); 8. Adott helyen levő elem lecserélése listaneve.set(4,"valami"); 9. A listán található elemek számának lekérése listaneve.size(); A listát a következő parancsok segítségével tudjuk kiírattatni egy textviewba: for (int j = 0; j < listaneve.size(); j++) textview1.append(listaneve.get(j) + ", "); Konkrét példán az összes művelet: 7
5. ábra Műveletek listán, forráskódos 8
4 Pattogó android figura 4.1 A program rövid leírása A program kirajzol egy android figurát, és ha a képernyőn érintést érzékel, akkor elindítja azt abba az irányba. Minél távolabbi az érintés a bábutól, annál gyorsabban, és annál tovább fog mozogni. Egy idő után elkezd lassulni, majd teljesen megáll. Meg van határozva a képernyő szélessége és hosszúsága, így ha eléri a szélét, akkor onnan visszapattanva folytatja útját. 4.2 Programkód bemutatása A program három java filet tartalmaz: GyorsulasosMozgatas.java, GrafikaKirajzolasa.java, MainThread.java. GyorsulasosMozgatas.java A program az ebben a fájlban levő utasításokat hajtja végre elsődlegesen. Az alábbi parancs segítségével pedig áttér a következőre, vagyis a GrafikaKirajzolasa fájlra: setcontentview(new GrafikaKirajzolasa(this)); GrafikaKirajzolasa.java Változók, példányok: Függvények: thread: ez maga a szál, ami biztosítja, hogy a program folyamatosan fusson, számoljon és rajzolja ki az android figurát, MozgatandoFigura: az android figura, mely a képernyőn látható, maxy, maxy: a képernyőnk szélessége és hosszúsága, ezek között mozog a figura, xpoz,ypoz: a figura kezdőpozíciója, erox,eroy: meghatározzák, hogy mekkora erővel induljon el a figura, lassulas: hogyan lassuljon a figura. GrafikaKirajzolasa: konstruktor, SurfaceChanged: ez a függvény akkor hívódik meg, amikor a képernyő felülete megváltozik, például elfordítjuk a készüléket, ezáltal megváltozik a szélessége és hosszúsága, SurfaceCreated: elindítja a szálat, SurfaceDestroyed: szál leállítása, ontouchevent: ennek a függvénynek a segítségével kapjuk meg a képernyőn lenyomott pozíció koordinátáit, illetve meghatározza azt is, hogy milyen sebességgel induljon el a figura, ondraw: a figura folyamatos kirajzolása a képernyőre, mozgat: ez a függvény határozza meg, hogy a figurának hol legyen a következő megjelenése a képernyőn. 9
MainThread.java Függvények: setrunning: ez egy bool változót állít igaz vagy hamis értékre (szál futása, leállítása), MainThread: konstruktor, run: ez maga a szál, addig fut, amíg a running változó értéke igaz, minden egyes ciklusában meghívja a mozgat, és az ondraw függvényt. 10