Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Benjamin Koppe DVA-Seminar WS 2012/2013. News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite."—  Präsentation transkript:

1 Benjamin Koppe DVA-Seminar WS 2012/2013

2 News Modul Kommunikation mit dem CMS Aktualisierung der Daten Implementierung eines AsyncTask Datenhaltung SQLite GreenDAO 2

3 3

4 4

5 Infopark CMS Fiona ( https://cms.hs-augsburg.de/ ) https://cms.hs-augsburg.de/ Kommunikation über XML Schnittstelle Content Retrieval and Update Language (CRUL) 5

6 6

7 7

8 Aktualisierung findet momentan im UI-Thread statt Nachteile: UI-Thread wird blockiert App wird schlimmstenfalls beendet Erweiterung: Auslagerung in einen AsyncTask 8

9 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

10 private class OurAsyncTask extends AsyncTask {…} Params: Typ der zu berechnenden Parameter Progress: Typ des Fortschritts Result: Ergebnistyp der Berechnung 10

11 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

12 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

13 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

14 14

15 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

16 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

17 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

18 18

19 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

20 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

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

22 Abfragen können mittels SQL abgesetzt werden Alternative: QueryBuilder API Abfrage aller User mit Vornamen Joe, sortiert nach Nachnamen List joes = contactDao.queryBuilder().where(Properties.Name.eq(DVA")).orderAsc(Properties.PhoneNumber).list(); 22

23 23

24 Satya Komatineni, Dave MacLean, Sayed Hashimi: Pro Android 3. Apress,


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

Ähnliche Präsentationen


Google-Anzeigen