benjamin koppe dva-seminar ws 2012/2013. news modul kommunikation mit dem cms aktualisierung der...
TRANSCRIPT
News ModulÜberblick und Erweiterung
Benjamin KoppeDVA-Seminar WS 2012/2013
News Modul◦ Kommunikation mit dem CMS
Aktualisierung der Daten◦ Implementierung eines AsyncTask
Datenhaltung◦ SQLite◦ GreenDAO
Was erwartet uns heute?
2
News Modul
3
News Modul
4
Infopark CMS Fiona (https://cms.hs-augsburg.de/) Kommunikation über XML Schnittstelle
◦ Content Retrieval and Update Language (CRUL)
5
News Modul
6
News Modul
Aktualisierung der Daten
7
Aktualisierung findet momentan im UI-Thread statt
Nachteile:◦ UI-Thread wird blockiert◦ App wird schlimmstenfalls beendet
Erweiterung: ◦ Auslagerung in einen AsyncTask
8
Aktuelle Situation
gedacht für die Ausführung kurzer Aufgaben „Berechnung” läuft im Hintergrund Ergebnis wird an den UI-Thread geschickt
(ohne selbst Handler oder Threads verwenden zu müssen)
AsyncTask ermöglicht also die richtige Verwendung des UI-Threads
AsyncTask versteht sich nicht als Threading-Framework, sondern als Hilfsklasse
9
AsyncTask - Definition
private class OurAsyncTask extends AsyncTask<Void, Void, Void> {…}
Params: Typ der zu berechnenden Parameter Progress: Typ des Fortschritts Result: Ergebnistyp der „Berechnung”
10
AsyncTask - Definition
onPreExecute() ◦ wird im UI-Thread aufgerufen, bevor der eigentliche Task startet◦ wird normalerweise verwendet um das GUI vorzubereiten (z.B.
Fortschrittsanzeige einblenden) doInBackground(Params)
◦ wird im Hintergrund ausgeführt◦ Aufruf findet unmittelbar nach onPreExecute() statt◦ hier findet die eigentliche „Berechnung“ statt◦ publishProgress(Progress…) kann verwendet werden um den Fortschritt
anzuzeigen◦ mittels onProgressUpdate() kann nun wiederum der UI-Thread manipuliert
werden onProgressUpdate()
◦ wird im UI-Thread ausgeführt wenn publishProgress() aufgerufen wird◦ die Berechnung im Hintergrund wird weiterhin ausgeführt
onPostExecute(Result)wird im UI-Thread ausgeführt sobald die Aufgabe im Hintergrund abgeschlossen ist
11
AsyncTask - Definition
muss als Kindklasse von AsyncTask implementiert werden
doInBackground() muss vorhanden sein die Ausführung gestaltet sich sehr simpel
new DemoTask().execute(url1, url2, url3);
12
AsyncTask
Ein Task kann durch Aufruf von cancel() auch abgebrochen werden
isCancelled() gibt dann TRUE zurück anstatt onPostExecute() wird onCancelled()
aufgerufen sobald doInBackground() terminiert
nach Möglichkeit sollte isCancelled() in der doInBackground()-Methode ständig überprüft werden, um sicherzustellen, dass der Task schnellst möglich abgebrochen wird
13
AsyncTask - Cancelling
Datenhaltung
14
Daten werden nicht gespeichert Nachteile:
◦ Nachrichten werden bei jedem Öffnen des Moduls erneut geladen
◦ Internetverbindung ist Voraussetzung Erweiterungen:
◦ Caching der Nachrichten in einer Datenbank◦ Einführung eines Update-Intervalls
15
Aktuelle Situation
Beispiel: Kontakte Kontakt muss als (Java)-Objekt verwendet
werden können Implementierung einer Model-Klasse mit
getter- und setter-Methoden Datenbank Handler Klasse
(SQLiteOpenHelper)◦ onCreate() – enthält create table statements. Wird
aufgerufen, wenn die DB erstellt wird.◦ onUpgrade() – wird aufgerufen wenn die DB
verändert wird.
16
Datenbankzugriff mit Android
Open-Source-Projekt Mapping von Java-Objekten zu
Datenbanktabellen create, read, update, delete über einfache
API Vorteile:
◦ Performance◦ leicht verständliche API◦ speziell für Android◦ minimaler Speicherverbrauch◦ kleine Library
17
GreenDAO - Überblick
18
GreenDAO - Verwendung
Schema erstellen (mit Version und Package) Schema schema = new Schema(1, "de.hsa.greendaoexample");
Entity erstellen Entity contact = schema.addEntity(“Contact");
◦ contact.addIdProperty();◦ contact.addStringProperty("name");◦ contact.addStringProperty(“phoneNumber");
Code generieren◦ DaoGenerator daoGenerator = new DaoGenerator();◦ daoGenerator.generateAll(schema, “../Example/src-gen");
19
GreenDAO – Generator Projekt
DaoMaster◦ Startpunkt für GreenDAO◦ hält SQLiteDatabase-Objekt◦ kümmert sich um die DAO-Klassen (nicht Objekte!)◦ statische Methoden zum Erstellen und Löschen von Tabellen
DaoSession◦ kümmert sich um alle verfügbaren DAO-Objekte in einem
Schema◦ Zugriff erfolgt über die getter-Methoden
DAOs◦ Data Access Object kapselt den Zugriff auf eine Datenquelle◦ Folge: Datenquelle kann ausgetauscht werden kann, ohne
dass der aufrufende Code geändert werden muss Entities
◦ Persistente Objekte◦ Repräsentieren einen Datensatz als POJO
20
GreenDAO – Android Projekt
helper = new DaoMaster.DevOpenHelper(this, „contacts.db", null); db = helper.getWritableDatabase(); daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); contactDao = daoSession.getContactDao();
21
GreenDAO – Initialisierung
Abfragen können mittels SQL abgesetzt werden
Alternative: QueryBuilder API Abfrage aller User mit Vornamen Joe,
sortiert nach NachnamenList joes = contactDao.queryBuilder().where(Properties.Name.eq(“DVA")).orderAsc(Properties.PhoneNumber).list();
22
GreenDAO – QueryBuilder
Vielen Dank für eure
Aufmerksamkeit!
23
Satya Komatineni, Dave MacLean, Sayed Hashimi: Pro Android 3. Apress, 2011
http://developer.android.com http://greendao-orm.com/ http://www.androidhive.info/ http://www.vogella.com/ http://www.infopark.de/cms
Quellen
24