24
News Modul Überblick und Erweiterung Benjamin Koppe DVA-Seminar WS 2012/2013

Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

Embed Size (px)

Citation preview

Page 1: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

News ModulÜberblick und Erweiterung

Benjamin KoppeDVA-Seminar WS 2012/2013

Page 2: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

News Modul◦ Kommunikation mit dem CMS

Aktualisierung der Daten◦ Implementierung eines AsyncTask

Datenhaltung◦ SQLite◦ GreenDAO

Was erwartet uns heute?

2

Page 3: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

News Modul

3

Page 4: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

News Modul

4

Page 5: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

Infopark CMS Fiona (https://cms.hs-augsburg.de/) Kommunikation über XML Schnittstelle

◦ Content Retrieval and Update Language (CRUL)

5

News Modul

Page 6: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

6

News Modul

Page 7: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

Aktualisierung der Daten

7

Page 8: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

Aktualisierung findet momentan im UI-Thread statt

Nachteile:◦ UI-Thread wird blockiert◦ App wird schlimmstenfalls beendet

Erweiterung: ◦ Auslagerung in einen AsyncTask

8

Aktuelle Situation

Page 9: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 10: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 11: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 12: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 13: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 14: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

Datenhaltung

14

Page 15: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 16: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 17: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 18: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

18

GreenDAO - Verwendung

Page 19: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 20: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 21: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

helper = new DaoMaster.DevOpenHelper(this, „contacts.db", null); db = helper.getWritableDatabase(); daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); contactDao = daoSession.getContactDao();

21

GreenDAO – Initialisierung

Page 22: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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

Page 23: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

Vielen Dank für eure

Aufmerksamkeit!

23

Page 24: Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite

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