Image
30.6.2016 0 Comments

Programujeme pre Android /10. časť

Vtejto časti seriálu opíšeme sled činností, ktorých vykonaním implementujeme synchronizáciu údajov uložených vinternej databáze SQLite (zariadenie s Androidom) súdajmi uloženými v externej databáze MySQL (W/LAMP webový server).

Vpodstate ide opodobné úlohy, aké sme opísali vpredošlej časti seriálu, ale ztrochu iného pohľadu. Vtomto prípade neuvažujeme iba nadpriamou správou údajov uložených v databáze MySQL, ale ide nám o pravidelnú synchronizáciu databáz. Uvedieme dva prípady, ato synchronizáciu pri zmene obsahu externej databázy asynchronizáciu pri zmene obsahu internej databázy. Všetky informácie neskôr použijeme na prípravu vzorovej aplikácie implementujúcej obidva postupy. Praktická časť vrátane zdrojového kódu aplikácie bude prílohou budúcej časti seriálu.

Prípad A – synchronizácia internej databázy po zmeneexternej databázy

Synchronizáciu údajov uložených vdatabázach možno riešiť viacerými spôsobmi. Vkaždom prípade však rozlišujeme medzi automatickou synchronizáciou (napr. vždy po pripojení androidového zariadenia do siete internet) a synchronizáciou uskutočnenou na základe pokynu používateľa (zväčša ťuknutím na tlačidlo).

Synchronizácia internej databázy SQLite po zmene externej databázy MySQL

Algoritmus poloautomatickej synchronizácieúdajov spravovaných databázou MySQL s údajmiuloženými v databáze nainštalovanej vnašom androidovom zariadení sa začína obvykle vytvorením príslušných databáz, ich tabuliek a,samozrejme, nastavením príslušných prístupových práv. Databázy ajednotlivé tabuľky vytvoríme rovnako na serveri aj na zariadení. Správu údajov uložených na serveri riešime pomocou príslušných skriptov PHP, ktoré sme predstavili už minule. Konkrétne súbory máme uložené na strane servera v zložkách určených na to. Skriptyplnia nasledujúce úlohy:

1. Otvárajú (mysql_connect) aukončujú (mysql_close) spojenie sdatabázou na základe príslušných privilégií (host, username, password, database).

2. Vytvárajú rozhranie medzi databázou MySQL ainternou androidovou databázou (SQLite, resp. aplikáciou).

3. Vytvárajú / čítajú / aktualizujú / mažú (tzv. CRUD – Create Read Update Delete) údaje na strane servera = INSERT INTO, SELECT, UPDATE, DELETE nad databázou MySQL.

4. Vykonávajú ďalšie asistenčné úlohy (notifikácia, upozornenia, práca sformátom JSON = json_encode, json_decode) avneposlednom rade sprístupňujú databázu prostredníctvom klasického internetového prehliadača.

Čo sa týka Androidu, aplikáciu vytvoríme pomocou štandardného postupu, pričom jejpoužívateľské rozhranie (GUI) prispôsobíme našim potrebám. Grafické prostredie aplikácie (layout) nie je vtomto prípade dôležité. Oveľa viac nás zaujímajú časti, pomocou ktorých budeme riešiť správu internej databázy ajej synchronizáciu sexternou databázou. Implementáciu CRUD nad databázou SQLite sme už riešili minule. Využívali sme pri tom jednotlivé metódy triedy SQLiteDatabase (execSQL, rawQuery, insert, close...).

Synchronizačný algoritmus kontrolujúci zmeny externej databázy je realizovaný BroadcastReceiverom. Jeho metóda onReceive() sa spúšťa vo vopred stanovenom časovom intervale avykonáva nasledujúce činnosti:

1. Receiver periodicky kontroluje zmeny externej databázy (zasiela požiadavky HTTP spúšťajúce skripty PHP)

Java ponúka niekoľko zaujímavých riešení na prístup kserverom, na ktorých sú spustené služby HTTP. Jedno z nich je aj možnosť využitia metód nadstavbovej knižnice Android Asynchronous Http Client (http://loopj.com/android-async-http). Tá prostredníctvom triedy AsyncHttpClient ponúka metódy na zasielanie avyhodnocovanie požiadaviek HTTP zasielaných na server. Požiadavky môžu byť typu GET (požiadavka na údaje špecifického zdroja), typu POST (požiadavka na spracovanie údajov špecifickým zdrojom) alebo ďalších typov. Receiver používa vnašom prípade metódu post() (typ POST) triedy AsyncHttpClient na zasielanie požiadaviek na server, konkrétne na interface PHP skript vracajúci počet zmenených riadkov tabuľky databázy alebo iné požadované údaje.

2. Receiver vprípade výskytu zmeny zabezpečuje spustenie služby upozorňujúcej na túto zmenu (notifikácie) anásledne spustenie aplikácie zabezpečujúcej synchronizáciu

Synchronizácia sa vykoná na pokyn používateľa. Aplikácia opakovane pripraví azašle požiadavku na server, pričom načíta všetky zmenené údaje (obsah zmenených riadkov tabuľky). Manipuláciu stakto získanými údajmi riešime svyužitím nám známeho formátu JSON. Pritom nám svýhodou pomáha ďalšia nadstavbová knižnica GSON (https://code.google.com/p/google-gson), pomocou ktorej dokážeme konvertovať objekty Java na ich reprezentáciu JSON anaopak. Údaje usporiadané podľa pravidiel JSON sú následne extrahované auložené vinternej databáze SQLite. Tým dôjde kdokončeniu vzájomnej synchronizácie databáz.

3. Vprípade, že vexternej databáze nebola vykonaná žiadna zmena (neboli zmenené žiadne riadky tabuľky), receiver informuje používateľa, že synchronizácia nie je nevyhnutná, apokračuje vperiodickej kontrole zmien.

Prípad B – synchronizácia externej databázy po zmeneinternej databázy

Ide opresne opačný prípad ako predtým uvedený. Zpohľadu Androidu ide opriamočiaru činnosť porovnateľnú stou, ktorú sme opísali vpredošlej časti seriálu. Namiesto toho, aby sme údaje ukladali priamo do externej databázy, ich ukladáme do internej databázy SQLite anásledne vykonávame synchronizáciu sexternou databázou MySQL. Údaje tak síce máme uložené na dvoch miestach, ale týmto prístupom spĺňame jednu z charakteristických čŕt Androidu, ktorou je schopnosť práce aj bez prístupu kexternému zdroju. Pre Android je typické, že dokáže pracovať off-line aaž vprípade dostupnosti on-line spojenia synchronizuje svoje databázy sexternými zdrojmi.

obr2.jpg

Synchronizácia externej databázy MySQL po zmene internej databázy SQLite

Vytvorenie aplikácie je úplne totožné ako vpredošlom prípade. Ďalej vykonáme nasledujúce kroky:

1. Používateľ vykoná zmeny (CRUD) údajov uložených v internej databáze.
2. Na pokyn používateľa (alebo včasovom intervale, resp. vprípade dostupnostiexterného zdroja) je serveru (hostname / IP address) zaslaná požiadavka HTTP (client.post) na spustenie konkrétneho skriptu PHP; v požiadavke sú integrované zmenené údaje štruktúrované vo formáte JSON.
3. Skript PHP dekóduje údaje z formátu JSON auloží ich do databázy MySQL.
4. Android aPHP si zväčša vymenia ďalšie údaje, ktorými sa vzájomne informujú oúspechu/neúspechu vykonaných činností, prípadne ďalších podrobnostiach.

 

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

ITPro

Linux súkromne i pracovne v2.0 (14. časť): Small Business Server

09.11.2016 14:57

Pojem Small Business Server (malý firemný server) začala používať spoločnosť Microsoft ešte v roku 2000 na označenie servera, ktorý ­dokázal plniť úlohy niekoľkých samostatných serverov. Aplikačná vrs ...

ITPro

Industry 4.0: Fikcia alebo už realita?

09.11.2016 14:52

Štvrtá priemyselná revolúcia je pomenovanie rozsiahlych zmien prudko vstupujúcich do súčasného priemyslu. Nositeľom týchto zmien je digitalizácia výroby a optimalizácia všetkých podnikových procesov v ...

ITPro

Vývoj aplikácií UWP pre Xbox One II.

09.11.2016 14:47

V predošlej časti sme ukázali postup, ako si ­vytvoriť vývojársky účet a aktivovať vývojársky režim na hernej konzole Xbox One, aby ste mohli testovať svoje aplikácie. Výhodou hernej konzoly Xbox je v ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá