Image
1.7.2016 0 Comments

Programujeme pre Android /14. časť

V tomto článku sa plnou silou vrhneme na praktickú implementáciu pridávania súborov (konkrétne obrázkov) k položkám zoznamu a následnú synchronizáciu databáz. Napriek tomu, že budeme musieť mnoho vecí zjednodušiť, pokúsime sa opísať celý proces od výberu obrázka z galérie smartfónu až po jeho uloženie na server.

Zameriame sa na pridávanie konkrétneho typu súboru, ktorým je obrázok. Nič nám však nebráni v tom, aby sme rovnaký postup zovšeobecnili a umožnili tak používateľom pridávať k položkám zoznamu akékoľvek typy súborov. V konečnom dôsledku vždy ide o HTTP prenos údajových bajtov a je jedno, či tieto bajty reprezentujú obrázok, textový dokument, prezentáciu, hudobnú skladbu či iný typ súboru.

obr1.bmp

 

Pridanie obrázkau k položke zoznamu a odoslanie obrázka na server v procese synchronizácie

Algoritmus pridávania obrázkov k položkám zoznamu

Pri tvorbe algoritmu vychádzame z úvah, pri ktorých obrázok, ktorý chceme priradiť k položke zoznamu, uložíme do osobitnej zložky patriacej našej aplikácii tak, aby nedošlo k strate obrázka v prípade jeho vymazania z galérie smartfónu. Ďalej uvažujeme nad uložením cesty k tomuto obrázku do tabuľky SQLite. Pri synchronizácii požadujeme, aby sa všetky obrázky priradené položkám tabuľky SQLite odoslali (upload) na server a k zodpovedajúcim položkám tabuľky MySQL sa doplnili názvy prenesených súborov. V tomto momente neriešime všetky aspekty CRUD, teda používateľ zatiaľ nemá možnosť obrázky vymazávať, resp. nahrádzať inými.

Zvolený procesný postup pridávania obrázkov k položkám zoznamu je nasledujúci:

  1. K pôvodnému postupu, pri ktorom sme do vstupného poľa data (EditText) zadali text = obsah položky zoznamu, sme doplnili možnosť pridania obrázka pomocou tlačidla PRIDAJ OBRÁZOK.
  2. Metódou startActivityForResult() je spustená nová aktivita, pomocou ktorej používateľ vyberie obrázok z galérie smartfónu.
  3. Po výbere obrázka dôjde v rámci metódy onActivityResult() (selektora LOAD_FROM_GALLERY) ku skopírovaniu obrázka do zložky db_files na externom úložisku smartfónu. Obsah tejto zložky programovo nadväzuje na aplikáciu db_sync_v3 pomocou getExternalFilesDir(),čo znamená, že po odinštalovaní aplikácie sa automaticky vymažú všetky obrázky nachádzajúce sa v uvedenej zložke.
  4. Nasleduje reakcia aplikácie na stlačenie tlačidla m_uloz_riadok. Pôvodnú funkcionalitu sme nemenili. Jediná zmena je doplnenie stĺpca attachment tabuľky údaje, do ktorého sa ukladá absolútna cesta k súboru s obrázkom. V prípade, ak nie je vybratý nijaký obrázok, do stĺpca attachment sa uloží jednoduchý text „no".
  5. Majoritná zmena zdrojového kódu aplikácie nastala v prípade synchronizačných metód. Okrem toho, že došlo k markantnej zmene spôsobu komunikácie aplikácie so serverom, v rámci metódy syncMySQL_to_SQLite() voláme metódu UploadImage(), ktorej úlohou je odoslať obrázok prislúchajúci konkrétnemu riadku tabuľky SQLite na server. Významnú rolu pri tom zohráva PHP skript uploadimage.php, ktorý sa nachádza na webovom serveri.
  6. Algoritmus synchronizácie sa končí vložením názvu odoslaného súboru do stĺpca attachment MySQL tabuľky test_table nachádzajúcej sa na serveri.

Metódy podporujúce algoritmus

Po pridaní obrázka k položke zoznamu je nevyhnutné položku správne zobraziť, čo znamená novú implementáciu metód triedy CursorAdapter. Akákoľvek komunikácia so serverom opísaná v bode 5 prebieha na pozadí (doInBackground()), keď je volaná novo pridaná metóda server_post(). Jednoznačne najvýznamnejšia novo pridaná metóda aplikácie je metóda UploadImage(), ktorá završuje proces synchronizácie databáz.

Detailnejší význam uvedených metód je nasledujúci:

Trieda
Metóda
Význam
MyAdapter
bindView()

Je vykonávaná pri zobrazení položiek zoznamu ListView, pričom pri zobrazovaní obrázkov dochádza k ich zmenšeniu a korektnému otočeniu v rámci metódy setImageBitmap(loadImage()).

httpPost
server_post()

 

Vytvorenie spojenia HTTP so serverom url.openConnection() a odoslanie parametrov POST zvolenému skriptu PHPVykonanie skriptu na strane servera a získanie prislúchajúcej odpovede conn.getResponseMessage().

MainActivity
UploadImage()

 

Vytvorenie spojenia so serverom, odoslanie obrázka dos.write() a získanie odpovede zo servera.

obr2.bmp

Štruktúra tried aplikácie db_sync_v3 a zobrazenie kódu PHP skriptu uploadimage.php

Webový server

Základný princíp synchronizácie údajov uložených v jednotlivých databázach je používanie sprostredkujúcich skriptov PHP, ktoré sa nachádzajú na strane servera. Z dôvodu doplnenia obrázkov k riadkom tabuľky SQLite musíme v prvom rade doplniť našu testovaciu tabuľku nachádzajúcu sa na serveri o nový stĺpec. Na strane servera ďalej vytvoríme zložku db_files, do ktorej budú umiestňované uploadované obrázky.

Do tabuľky MySQL ukladáme iba jednoduchý názov súboru s obrázkom, nie celú, resp. absolútnu cestu, pretože tá je odlišná od absolútnej cesty používanej v prípade smartfónu. Súbory odoslané na server môžeme nájsť v uvedenej zložke a je už len na nás, akým spôsobom pripravíme skripty zobrazujúce obsah tabuľky MySQL. V našom prípade používame na kontrolu funkčnosti programového kódu a obsahu tabuľky MySQL prostredie phpMyAdmin.

Na zopakovanie uvedieme, že funkčnosť aplikácie db_sync je závislá od existencie webového prostredia W/LAMP. Webový server musí byť schopný vykonávať skripty PHP a takisto musíme mať k dispozícii funkčnú databázu MySQL, v rámci ktorej vytvoríme tabuľku test_table (zodpovedajúci príkaz SQL je súčasťou súboru php/dbfunc.php). URL servera (DB_HOST), názov databázy (DB_DATABASE) a príslušné prihlasovacie údaje (DB_USER, DB_PASSWORD) nastavujeme takisto v súbore Všetky ostatné skripty nachádzajúce sa v zložke php koreňa súborovej štruktúry aplikácie musíme umiestniť do príslušnej zložky nášho webového servera a zodpovedajúce URL jednotlivých skriptov PHP musíme uviesť v súbore app/src/main/res/values/strings.xml.

 


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á