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

Bosch ConnectedWorld 2019: 3 príklady využitia IoT v praxi (video)

16.05.2019 12:54

Bosch Connected World 2019 je jednou z najväčších medzinárodných konferencií venovanej Internetu vecí. V dňoch 15. a 16. mája na nej predstavuje viac ako 80 vystavovateľov svoje riešenia pre využitie ...

ITPro

Security: Päť operačných systémov vo firme? Zvládnuť sa to dá

03.06.2019 00:00

Bežný človek by si mohol myslieť, že firmy v našich končinách nefungujú na ničom inom, len na Windows. Ide síce o najrozšírenejší operačný systém, nemusí to však byť najvhodnejšia platforma pre všetky ...

ITPro

Prieskum: Trh ERP na Slovensku v roku 2018

08.05.2019 12:41

Redakcia magazínu PC REVUE uskutočnila v priebehu apríla prieskum predaja podnikových informačných systémov (ERP) na slovenskom trhu v roku 2018. V rámci prieskumu boli oslovené obchodné zastúpenia za ...

q

Žiadne komentáre

Vyhľadávanie

SWAN_062019

Najnovšie videá



PC forum button