Workshop 6 (ws6C) native Entwicklung für mobile Geräte
description
Transcript of Workshop 6 (ws6C) native Entwicklung für mobile Geräte
© Zühlke 2013
Oliver Brack
Workshop 6 (ws6C) native Entwicklung für mobile GeräteMono for Android
25. März 2013Folie 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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