1. diel - Databáza v Androide - Vytvorenie ukážkového projektu
Vitajte pri seriáli o ukladaní dát do databázy v Androide.
Postupne si ukážeme dva spôsoby programovania databázy - staršie a novšie. Vďaka tomu bude výklad rozdelený do dvoch samostatných celkov.
Najprv budeme pracovať na projekte, ktorý bude s databázou pracovať základným (starším) spôsobom. Po dokončení projektu ho upravíme pre použitie novšieho spôsobu práce s databázou (knižnica Room).
Samozrejmosťou bude aj ukážkový projekt v podobe jednoduchého poznámkového bločku, ktorý bude nové poznámky ukladať do databázy. Táto databáza bude umiestnená v úložisku zariadenia, na ktorom aplikácia pobeží.
Na hlavnej obrazovke ukážkovej aplikácie bude zobrazovaný zoznam
uložených poznámok. Po kliknutí na ľubovoľnú poznámku bude v
dialógovom okne zobrazený jej obsah. Každej poznámke budeme
môcť nastaviť prioritu (Nízká
,
Střední
alebo Vysoká
), ktorá bude mať vplyv na
farbu poznámky v zozname poznámok. Tiež
bude možné akúkoľvek poznámku označiť ako
neaktívnu.
Hlavné okno aplikácie bude vyzerať takto:
Detail poznámky:
Vytvorenie novej poznámky:
Vytvorenie projektu
Notepad
Presunieme sa do okna so šablónami. V ľavej časti okna
vyberieme možnosť Phone and Tablet. V pravej
časti okna vyberieme možnosť Empty Activity:
V ďalšom okne, do políčka Name, zadáme názov nášho
projektu Notepad
. Do políčka Package name
napíšeme cz.itnetwork.notepad
. Pretože budeme programovať v
Jave, vyberieme v políčku Language možnosť
Java:
Po dokončení nastavenia projektu je zobrazené vývojové prostredie
Android štúdia, v ktorom vidíme otvorené vygenerované
súbory MainActivity.java
a activity_main.xml
:
Súbor strings.xml
Do súboru strings.xml
ukladáme textové řetězce
použité v projekte. V Java kóde, alebo XML kóde na ne iba
odkazujeme. Súbor res/values/strings.xml
patrí
medzi súbory automaticky generované Android štúdiom pri
vytvorení projektu:
Do súboru strings.xml
pridáme nasledujúce riadky:
<string name="delete_note">Odstranění poznámky</string> <string name="question_delete_note">Opravdu tuto poznámku smazat?</string> <string name="yes">Ano</string> <string name="close">Zavřít</string> <string name="note_detail">Detail poznámky</string> <string name="no">Ne</string> <string name="warning">Upozornění</string> <string name="question_close">Poznámka nebude uložena. Opravdu zavřít?</string>
Rozhranie AppConstants
Rozhranie AppConstants
vytvoríme z dôvodu
prehľadnosti kódu projektu. Jeho účelom je vytvoriť
úložisko konštánt použitých v projekte. V prípade tohto
projektu to nie je nutné, pretože budeme deklarovať iba tri konštanty. V
rozsiahlejších projektoch je to veľmi užitočné.
V štruktúre projektu klikneme pravým tlačidlom myši na
zložku notepad
av zobrazenom menu, cez položku
New, zvolíme možnosť Java Class:
V zobrazenom okne doplníme do prvého textového políčka názov
nového rozhrania, v našom prípade AppConstants
. Pod
textovým políčkom označíme možnosť Interface a
potvrdíme stlačením klávesu Enter:
Tu je vždy defaultne vybraná možnosť Class. Ak by sme zabudli túto možnosť prepnúť na Interface, bola by namiesto rozhrania vytvorená klasická trieda.
Vytvorený súbor AppConstants.java
otvoríme a doplníme
týmito tromi riadkami:
public interface AppConstants { int PRIORITY_LOW = 0; int PRIORITY_NORMAL = 1; int PRIORITY_HIGH = 2; }
Rozhranie AppConstants
môžeme v projekte použiť dvoma
spôsobmi. Prvým spôsobom je priamy prístup:
note.setPriority(AppConstants.PRIORITY_HIGH);
Druhou možnosťou je implementácia rozhrania
AppConstants
triedou, v kóde ktorej potrebujeme konštanty
rozhrania použiť:
public class MyClass implements AppConstants { ... note.setPriority(PRIORITY_HIGH); ... }
Trieda MyClass
vo svojej hlavičke implementuje
rozhranie AppConstants
.
Trieda Note
Teraz v štruktúre projektu vytvoríme novú triedu
Note
, reprezentujúcu dátový model poznámok. V
zložke notepad
vytvoríme ďalšiu zložku s
názvom objects
av nej novú triedu
Note
:
public class Note { }
Premenné
V triedeNote
deklarujeme tieto premenné:
private int id; private String noteTitle; private String noteContent; private long date; private int priority; private boolean isActive;
Popis premenných:
id
: Hodnota typuint
s ID poznámky, prideleným databázou pri uložení poznámky.noteTitle
: Textový reťazecString
s nadpisom poznámky.noteContent
: Textový reťazecString
s obsahom poznámky.date
: Hodnota typulong
s dátumom vytvorenia poznámky v milisekundách.priority
: Číslo typuint
s číselným kódom priority poznámky. Budeme používať tri úrovne dôležitosti poznámky, ktoré máme pripravené ako konštanty v rozhraníAppConstants
.isActive
: Hodnota typuboolean
slúžiaca na označenie poznámky ako (ne)aktívna. Neaktívne znamená, že ju aktuálne nepotrebujeme, ale chceme ju nechať uloženú v databáze. V zozname poznámok bude mať šedú farbu pozadia.
Konštruktory
Ďalej v triedeNote
deklarujeme dva
konštruktory:
public Note() {} public Note(int id, String noteTitle, String noteContent, long date, int priority, boolean isActive) { this.id = id; this.noteTitle = noteTitle; this.noteContent = noteContent; this.date = date; this.priority = priority; this.isActive = isActive; }
Najprv sme deklarovali bezparametrický konštruktor. V
druhom parametrickom konštruktore prijímame všetky
parametre. Parametrický konštruktor použijeme pri vytváraní novej poznámky
a pri prevode surových dát načítaných z databázy na objekty typu
Note
.
Ak deklaruje trieda konštruktor s parametrami,
nie je možné v kóde projektu použiť konštruktor bez
parametrov napr. Note n = new Note();
. Explicitnou
deklaráciou bezparametrického konštruktora obnovíme
možnosť jeho použitia.
Gettery a settery
Nakoniec v triedeNote
deklarujeme sadu klasických
getterov a setterov:
public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNoteTitle() { return noteTitle; } public void setNoteTitle(String noteTitle) { this.noteTitle = noteTitle; } public String getNoteContent() { return noteContent; } public void setNoteContent(String noteContent) { this.noteContent = noteContent; } public long getDate() { return date; } public void setDate(long date) { this.date = date; } public int getPriority() { return priority; } public void setPriority(int priority) { this.priority = priority; } public boolean isActive() { return isActive; } public void setActive(boolean active) { isActive = active; }
V budúcej lekcii, Databázy v Androide - Trieda SQLiteOpenHelper , si pomocou Java kódu nadefinujeme štruktúru budúcej databázy poznámkového bločku.