Lekce 1 - Databáze v Androidu - Vytvoření ukázkového projektu
Vítejte u seriálu o ukládání dat do databáze v Androidu.
Postupně si ukážeme dva způsoby programování databáze - starší a novější. Díky tomu bude výklad rozdělen do dvou samostatných celků.
Nejprve budeme pracovat na projektu, který bude s databází pracovat základním (starším) způsobem. Po dokončení projektu jej upravíme pro použití novějšího způsobu práce s databází (knihovna Room).
Samozřejmostí bude i ukázkový projekt v podobě jednoduchého poznámkového bločku, který bude nové poznámky ukládat do databáze. Tato databáze bude umístěna v úložišti zařízení, na kterém aplikace poběží.
Na hlavní obrazovce ukázkové aplikace bude zobrazován seznam
uložených poznámek. Po kliknutí na libovolnou poznámku bude v
dialogovém okně zobrazen její obsah. Každé poznámce
budeme moci nastavit prioritu (Nízká,
Střední nebo Vysoká), která bude mít vliv na
barvu poznámky v seznamu poznámek. Také
bude možné jakoukoliv poznámku označit jako neaktivní.
Hlavní okno aplikace bude vypadat takto:

Detail poznámky:

Vytvoření nové poznámky:

Vytvoření projektu
Notepad
Přesuneme se do okna se šablonami. V levé části okna vybereme možnost Phone and Tablet. V pravé části okna vybereme možnost Empty Activity:

V dalším okně, do políčka Name, zadáme název našeho
projektu Notepad. Do políčka Package name
napíšeme cz.itnetwork.notepad. Protože budeme programovat v
Javě, vybereme v políčku Language možnost
Java:

Po dokončení nastavení projektu je zobrazeno vývojové prostředí
Android studia, v němž vidíme otevřené vygenerované
soubory MainActivity.java a activity_main.xml:

Soubor strings.xml
Do souboru strings.xml ukládáme
textové řetězce použité v projektu. V Java kódu, nebo XML
kódu na ně pouze odkazujeme. Soubor
res/values/strings.xml patří mezi soubory automaticky
generované Android studiem při vytvoření projektu:

Do souboru strings.xml přidáme následující řádky:
<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>
Rozhraní AppConstants
Rozhraní AppConstants vytvoříme z důvodu
přehlednosti kódu projektu. Jeho účelem je vytvořit
úložiště konstant použitých v projektu. V případě
tohoto projektu to není nutné, protože budeme deklarovat pouze tři
konstanty. V rozsáhlejších projektech je to velmi užitečné.
Ve struktuře projektu klikneme pravým tlačítkem myši na
složku notepad a v zobrazeném menu, přes položku
New, zvolíme možnost Java Class:

V zobrazeném okně doplníme do prvního textového políčka název
nového rozhraní, v našem případě AppConstants. Pod
textovým políčkem označíme možnost Interface a potvrdíme
stisknutím klávesy Enter:

Zde je vždy defaultně vybrána možnost Class. Pokud bychom zapomněli tuto možnost přepnout na Interface, byla by místo rozhraní vytvořena klasická třída.
Vytvořený soubor AppConstants.java otevřeme a doplníme
těmito třemi řádky:
public interface AppConstants { int PRIORITY_LOW = 0; int PRIORITY_NORMAL = 1; int PRIORITY_HIGH = 2; }
Rozhraní AppConstants můžeme v projektu použít dvěma
způsoby. Prvním způsobem je přímý přístup:
note.setPriority(AppConstants.PRIORITY_HIGH);
Druhou možností je implementace rozhraní
AppConstants třídou, v jejímž kódu potřebujeme konstanty
rozhraní použít:
public class MyClass implements AppConstants { ... note.setPriority(PRIORITY_HIGH); ... }
Třída MyClass ve své hlavičce implementuje
rozhraní AppConstants.
Třída Note
Nyní ve struktuře projektu vytvoříme novou třídu
Note, reprezentující datový model poznámek. Ve
složce notepad vytvoříme další složku s
názvem objects a v ní novou třídu
Note:
public class Note { }
Proměnné
Ve třídě Note deklarujeme tyto proměnné:
private int id; private String noteTitle; private String noteContent; private long date; private int priority; private boolean isActive;
Popis proměnných:
id: Hodnota typuints ID poznámky, přiděleným databází při uložení poznámky.noteTitle: Textový řetězecStrings nadpisem poznámky.noteContent: Textový řetězecStrings obsahem poznámky.date: Hodnota typulongs datem vytvoření poznámky v milisekundách.priority: Číslo typuints číselným kódem priority poznámky. Budeme používat tři úrovně důležitosti poznámky, které máme připravené jako konstanty v rozhraníAppConstants.isActive: Hodnota typubooleansloužící k označení poznámky jako (ne)aktivní. Neaktivní znamená, že ji aktuálně nepotřebujeme, ale chceme ji nechat uloženou v databázi. V seznamu poznámek bude mít šedou barvu pozadí.
Konstruktory
Dále ve třídě Note deklarujeme dva
konstruktory:
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; }
Nejprve jsme deklarovali bezparametrický konstruktor. V
druhém parametrickém konstruktoru přijímáme všechny
parametry. Parametrický konstruktor použijeme při vytváření nové
poznámky a při převodu surových dat načtených z databáze na objekty typu
Note.
Deklaruje-li třída konstruktor s parametry,
nelze v kódu projektu použít konstruktor bez parametrů
např. Note n = new Note();. Explicitní deklarací
bezparametrického konstruktoru obnovíme možnost jeho
použití.
Gettery a settery
Nakonec ve třídě Note deklarujeme sadu klasických
getterů a setterů:
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 příští lekci, Databáze v Androidu - Třída SQLiteOpenHelper, si pomocí Java kódu nadefinujeme strukturu budoucí databáze poznámkového bločku.


