180 likes | 362 Views
Workshop 6 (ws6C) native Entwicklung für mobile Geräte. Mono for Android. 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
E N D
Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono forAndroid
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 Workshop 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 Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Dritter WorkshopEinschränkungen • Ü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 Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Dritter WorkshopZiele • «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 Workshop 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) Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Repetition/Rückblick • «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! Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Service • 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":"nadia.huber@volkswagen.com","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)/"}] Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
ServiceStack • 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: • varrestClient = newJsonServiceClient("http://ws6c.cs.technik.fhnw.ch/group1");varcustomers = restClient.Get<List<Customer>>("/customer"); • Customer-Klasse aus Service-Projekt (C#) • Service-Zugriff analysieren: • Ausgabe auf Kommandozeile:Console.WriteLine(customers.Count); • Debugging mit Breakpoint Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Listen in Android (1/2) • 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() Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Listen in Android (2/2) • 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() Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Navigation in Android (Activities) • Activity mit Kundenliste als Start • [MainLauncher= true] • Activity mit Kundendetails • StartActivity() • Finish() • CustomerDetailsActivity erstellen für Kundendetails • 20_MonoDroid.CustomerManager.zip Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Activity-Aufruf mit Datenübergabe • Kundendetails bei Klick auf Kunde in Liste • listView.ItemClick+= OnItemClick; • Datenübergabe an Activity • Intent als Datenkontext • varintent = 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 • varcustomer= _customerProvider.GetCustomer(customerId); Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Menüs in Android • Aufruf durch Druck auf Taste «Menu» • Geräteabhängig • Kontextmenü mit Verschachtelung • Überladen der entsprechenden Methoden in der Activity • OnCreateOptionsMenu() • OnOptionsItemSelected() Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Hintergrund-Tasks mit TPL • 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 Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Ausbaumöglichkeiten • 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 Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack
Retrospektive • Fazit der drei vergangenen Workshops • … • … • … • Inputs für kommende Workshops • … • … • … Workshop 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) • XCode4.6.x (App Store) • Optional: • Mitglied beim «iOSDeveloper Program» (99$), falls man die App auf dem Gerät laufen lassen will, und/oder die App in den App Store ausliefern möchte. Workshop 6 (ws6C) native Entwicklung für mobile Geräte | Oliver Brack