18
© Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

Embed Size (px)

Citation preview

Page 1: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013

Oliver Brack

Workshop 6 (ws6C) native Entwicklung für mobile GeräteMono for Android

25. März 2013Folie 1

Page 2: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

Unser Plan (1/2)

18.2. (Romano) Einführung, «Mega CRM», Aufsetzen

25.2. (Romano) Einführung in Windows Phone 8 Entwicklung

04.3. (Romano) Umsetzung «Mega CRM» mit Windows Phone 8

11.3. (Oliver) Einführung in Mono-Entwicklung

18.3. (Oliver) Umsetzung «Mega CRM» mit MonoTouch

25.3. (Oliver) Umsetzung «Mega CRM» mit MonoDroid

01.4. Kein Workshop (Ostern)

08.4. (Michael) Einführung in iOS Entwicklung

15.4. (Michael) Umsetzung «Mega CRM» mit iOS

22.4. (Michael) Umsetzung «Mega CRM» mit iOS

25. März 2013 Folie 2

Page 3: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

Unser Plan (2/2)

29.4. (Philipp) Einführung in Android

06.5. (Philipp) Umsetzung «Mega CRM» mit Android

13.5. Kein Workshop (Projektwoche)

20.5. (Philipp) Umsetzung «Mega CRM» mit Android

27.5. (Matthias) Einführung in PhoneGap

03.6. (Matthias) Umsetzung «Mega CRM» mit PhoneGap

10.6. (alle) Präsentation Eurer Arbeit

25. März 2013 Folie 3

Page 4: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• Übersetzungen– In Musterlösung vorhanden

• Google Store– Thema bei nativer Android-Entwicklung (Philipp Kälin)

• UI rudimentär– Verfeinerung im nativen Workshop– Selbständiges Finish für Präsentation

• Nicht alle CRUD-Operationen– Zeitbudget– Musterlösung als Beispiel– Selbständiges Finish für Präsentation

Dritter WorkshopEinschränkungen

25. März 2013 Folie 4

Page 5: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

«Mega CRM» auf Android mit Mono

• Service konsumieren– ServerAccess (Business Layer, shared Code)– ServiceStack

• Kundenliste anzeigen– Tabellen in Android (ListView)

• Navigation in Android (Activities)– Kunde anzeigen

• Menüs in Android

• Hintergrund-Tasks (TPL)

• Kunde suchen (filtern)

• Kunde bearbeiten

• Kunde löschen

• Kunde hinzufügen

Dritter WorkshopZiele

25. März 2013 Folie 5

Page 6: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

Dritter WorkshopAgenda

• Einführung (5’)

• Repetition/Rückblick (5’)

• «Mega CRM» (30’)– ServerAccess mit ServiceStack– Kundenliste anzeigen (ListView)

Pause (5’)

• «Mega CRM» (40’)– Kundendetails anzeigen– Menüs in Android

• Retrospektive und Ausblick (5’)– Inputs für folgende Workshops– Vorbereitungen für iOS (nativ)

25. März 2013 Folie 6

Page 7: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• «Mega CRM» für iOS– max: selber fertig stellen– min: Musterlösung verstehen

– 99_MonoTouch.CustomerManager.zip

• Android-Emulator einrichten und testen– Beispiel-App (Template) muss laufen!

Repetition/Rückblick

25. März 2013 Folie 7

Page 8: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• http://ws6c.cs.technik.fhnw.ch/group1 – Gruppen 1-8– Vorsicht bei gegenseitigen Änderungen der Kundendaten!

• RESTful API mit JSON:– [{"Id":1,"Title":"Mrs","FirstName":"Lilliane","MiddleName

":"Catrina","LastName":"Wyss","Company":"Volkswagen","WebPage":"http://www.volkswagen.com","PhoneNumber":"+65 (1418) 832671","FaxNumber":"+21 (4004) 257244","MobileNumber":"+91 (6007) 144197","Street":"Lake Street 343","Email":"[email protected]","City":"Madison","State":"","PostalCode":"42481","Country":"Western Sahara","Department":"NPP","Office":"225","Profession":"welder","ManagersName":"Leopoldo Keller","AssistantName":"Agnes Weber","Nickname":"The Unpredictable","Birthday":"/Date(1042844400000+0100)/"}]

Service

25. März 2013 Folie 8

Page 9: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• Startprojekt mit ServerAccess– 10_MonoDroid.CustomerManager.zip

• ServerAccess-Projekt 1:1 von iOS-Lösung übernommen!– Referenzierte ServiceStack-Assemblies anders

• ServiceStack übernimmt Verbindungsaufbau und JSON-Serialisierung:– var restClient = new

JsonServiceClient("http://ws6c.cs.technik.fhnw.ch/group1");var customers = restClient.Get<List<Customer>>("/customer");

– Customer-Klasse aus Service-Projekt (C#)

• Service-Zugriff analysieren:– Ausgabe auf Kommandozeile:Console.WriteLine(customers.Count);

– Debugging mit Breakpoint

ServiceStack

25. März 2013 Folie 9

Page 10: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• ListView– <ListViewandroid:id="@+id/customerListView" android:layout_height="match_parent" android:layout_width="match_parent“ />

• Einzelne Zeile ebenfalls mit XML beschrieben– CustomerListItem.xml– Activity.LayoutInflater.Inflate()

• Eigener Adapter als Datenquelle– Entspricht TableViewSource in MonoTouch– Ableitung von BaseAdapter– Überschreiben der Methoden/Properties

– Count– GetItem()– GetItemId()– GetView()

Listen in Android (1/2)

25. März 2013 Folie 10

Page 11: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• Kundenliste als Tabelle anzeigen– ListView (siehe letzte Folie) in XML hinzufügen– Eigene Adapter-Klasse erstellen

– Kunde (Name/Vorname) mit vorgegebenem Layout (CustomerListItem.axml)

– Kundendaten entgegen nehmen und Adapter instanziieren

• Kundenfoto anzeigen– Byte-Array aus Customer-Objekt in Bitmap umwandeln

– BitmapFactory.DecodeByteArray()

Listen in Android (2/2)

25. März 2013 Folie 11

Page 12: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• Activity mit Kundenliste als Start– [MainLauncher = true]

• Activity mit Kundendetails– StartActivity()– Finish()

• CustomerDetailsActivity erstellen für Kundendetails

• 20_MonoDroid.CustomerManager.zip

Navigation in Android (Activities)

25. März 2013 Folie 12

Page 13: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• Kundendetails bei Klick auf Kunde in Liste– listView.ItemClick += OnItemClick;

• Datenübergabe an Activity– Intent als Datenkontext– var intent = new Intent();intent.SetClass(this, typeof(CustomerDetailsActivity));intent.PutExtra("customerId", customerId);StartActivity(intent);

• Datenübernahme in aufgerufenem Activity– var customerId = Intent.GetIntExtra("customerId", 0);– Kundendetails von Provider holen

– var customer = _customerProvider.GetCustomer(customerId);

Activity-Aufruf mit Datenübergabe

25. März 2013 Folie 13

Page 14: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• Aufruf durch Druck auf Taste «Menu»– Geräteabhängig– Kontextmenü mit Verschachtelung

• Überladen der entsprechenden Methoden in der Activity– OnCreateOptionsMenu()– OnOptionsItemSelected()

Menüs in Android

25. März 2013 Folie 14

Page 15: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• Kundendaten im Hintergrund laden– UI nicht blockieren– Benutzer kann lokal weiterarbeiten

• Task Parallel Library (TPL)http://msdn.microsoft.com/en-us/library/dd460717.aspx

• Methode im Hintergrund ausführen– Task.Factory.StartNew(DoSomethingOnBackgroundThread);

• UI aktualisieren (aus dem Hintergrund)– RunOnUiThread(DoSomethingOnUiThread);

– Entspricht InvokeOnMainThread in iOS

Hintergrund-Tasks mit TPL

25. März 2013 Folie 15

Page 16: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

• Kunde löschen

• Kunde hinzufügen

• Kunde suchen (filtern)

• Mehrsprachigkeit

• Menüs für Bearbeiten, Aktualisieren, Löschen

• Progress-Overlay während Serverzugriff

• Kundenadresse auf Karte visualisieren– Wegbeschreibung ab aktuellem Standort (GPS)

• Kundenfoto mit Kamera aufnehmen

• Kennzahlen des Kunden visualisieren– evtl. Chart Library einsetzen

• Kunde als Kontakt hinzufügen

Ausbaumöglichkeiten

25. März 2013 Folie 16

Page 17: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

Fazit der drei vergangenen Workshops

• …

• …

• …

Inputs für kommende Workshops

• …

• …

• …

Retrospektive

25. März 2013 Folie 17

Page 18: © Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono for Android 25. März 2013 Folie 1

© Zühlke 2013Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack

Seid Ihr bereit für iOS (nativ)?08.04.13

• «Mega CRM» für Android– max: selber fertig stellen– min: Musterlösung verstehen

– 99_MonoDroid.CustomerManager.zip

• Apple Macintosh Rechner (MacBook)– XCode 4.6.x (App Store)

• Optional: – Mitglied beim «iOS Developer Program» (99$),

falls man die App auf dem Gerät laufen lassen will, und/oder die App in den App Store ausliefern möchte.

25. März 2013 Folie 18