Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Www.mobile-developer-conference.de /mdc_conference | #mdc12 Tam HANNA Tamoggemon Limited Datenpersistenz mit Windows Phone 7.

Ähnliche Präsentationen


Präsentation zum Thema: "Www.mobile-developer-conference.de /mdc_conference | #mdc12 Tam HANNA Tamoggemon Limited Datenpersistenz mit Windows Phone 7."—  Präsentation transkript:

1 www.mobile-developer-conference.de /mdc_conference | #mdc12 Tam HANNA Tamoggemon Limited Datenpersistenz mit Windows Phone 7

2 www.mobile-developer-conference.de /mdc_conference | #mdc12 Biographisches Tam HANNA –Gruender der Tamoggemon Ltd –Betreiber von Websites ueber Handhelds –Fachautor –Programmierer

3 www.mobile-developer-conference.de /mdc_conference | #mdc12 Hoehepunkte Die Basics... und... Bilder ins Photoalbum speichern Dateien resusciieren LINQ to SQL Tieffliegende Schokolade

4 www.mobile-developer-conference.de /mdc_conference | #mdc12 Von Dateisystemen

5 www.mobile-developer-conference.de /mdc_conference | #mdc12 Die gute alte Zeit

6 www.mobile-developer-conference.de /mdc_conference | #mdc12

7 www.mobile-developer-conference.de /mdc_conference | #mdc12 Isolated Storage? Basis: echtes Dateisystem –KEINE Datenbank a la Palm OS Aber: jede App hat eigenen Arbeitsplatz

8 www.mobile-developer-conference.de /mdc_conference | #mdc12 SD Card? Nur fuer OEMs gedacht –Diversifizierung des Portfolios OS verwaltet die Karte –Gibt nur Arbeitsverzeichnis frei

9 www.mobile-developer-conference.de /mdc_conference | #mdc12 Isolated Storage Beispiel: MTPersistance1

10 www.mobile-developer-conference.de /mdc_conference | #mdc12 Datei lesen private void CmdRead_Click(object sender, RoutedEventArgs e) { try { IsolatedStorageFile x = IsolatedStorageFile.GetUserStoreForApplication(); IsolatedStorageFileStream myStream = new IsolatedStorageFileStream("settings.tmgn", System.IO.FileMode.Open, x); StreamReader reader = new StreamReader(myStream); textBox1.Text = reader.ReadToEnd(); reader.Close(); }

11 www.mobile-developer-conference.de /mdc_conference | #mdc12 Datei schreiben private void CmdStor_Click(object sender, RoutedEventArgs e) { try { IsolatedStorageFile x = IsolatedStorageFile.GetUserStoreForApplication(); //Create == Create OR Overwrite IsolatedStorageFileStream myStream = new IsolatedStorageFileStream("settings.tmgn", System.IO.FileMode.Create, x); StreamWriter writer = new StreamWriter(myStream); writer.Write(textBox1.Text); writer.Close(); }

12 www.mobile-developer-conference.de /mdc_conference | #mdc12 Datei loeschen private void CmdDel_Click(object sender, RoutedEventArgs e) { try { IsolatedStorageFile x = IsolatedStorageFile.GetUserStoreForApplicatio n(); x.DeleteFile("settings.tmgn"); }

13 www.mobile-developer-conference.de /mdc_conference | #mdc12 Diverses - I IsolatedStorageFile enthaelt: –CreateDirectory –DeleteDirectory –etcetc

14 www.mobile-developer-conference.de /mdc_conference | #mdc12 Diverses - II Derzeit keine Quota fuer IS –Mindestspeicher am WP7 = 8GB –Ist aber geteilt (!!!) Geht bei Deinstallation verloren –Daten online speichern?

15 www.mobile-developer-conference.de /mdc_conference | #mdc12 Isolated Preferences Beispiel: MTPersistance2

16 www.mobile-developer-conference.de /mdc_conference | #mdc12 Was ist das? Zweiwege-Woerterbuch –Speichert Wert/Schluessel-Paare –Wert muss serialisierbar sein Automatische Persistierung Minimalloesung fuer Prefs

17 www.mobile-developer-conference.de /mdc_conference | #mdc12 Instanz beschaffen using System.IO.IsolatedStorage; namespace MTPersistance2 { public partial class MainPage : PhoneApplicationPage { IsolatedStorageSettings mySettings; // Constructor public MainPage() { InitializeComponent(); mySettings = IsolatedStorageSettings.ApplicationSettings; }

18 www.mobile-developer-conference.de /mdc_conference | #mdc12 Schluessel einschreiben private void CmdSave_Click(object sender, RoutedEventArgs e) { try { mySettings.Add("Textbox", textBox1.Text); } catch (ArgumentException ex) {//Wert schon da mySettings["Textbox"] = textBox1.Text; }

19 www.mobile-developer-conference.de /mdc_conference | #mdc12 Schluessel lesen private void CmdRead_Click(object sender, RoutedEventArgs e) { try { textBox1.Text = (string)mySettings["Textbox"]; } catch (System.Collections.Generic.KeyNotFoundException ex) { MessageBox.Show(ex.Message); }

20 www.mobile-developer-conference.de /mdc_conference | #mdc12 Schluessel loeschen private void CmdRem_Click(object sender, RoutedEventArgs e) { mySettings.Remove("Textbox"); }

21 www.mobile-developer-conference.de /mdc_conference | #mdc12 States Beispiel: MTPersistance3

22 www.mobile-developer-conference.de /mdc_conference | #mdc12 Was ist das? Zweiwege-Woerterbuch –Speichert Wert/Schluessel-Paare –Wert muss serialisierbar sein NUR fuer Tombstoning –Keine echte Persistierung

23 www.mobile-developer-conference.de /mdc_conference | #mdc12 Wie bitte? Tombstoning –Oeffnen von Chooser –Druck auf Start Persistierung a la Palm OS Zwei Methoden in App.xaml.cs –IsApplicationInstancePreserved pruefen!

24 www.mobile-developer-conference.de /mdc_conference | #mdc12 Wie bitte? // Code to execute when the application is activated (brought to foreground) // This code will not execute when the application is first launched private void Application_Activated(object sender, ActivatedEventArgs e) { } // Code to execute when the application is deactivated (sent to background) // This code will not execute when the application is closing private void Application_Deactivated(object sender, DeactivatedEventArgs e) { }

25 www.mobile-developer-conference.de /mdc_conference | #mdc12 Mehr Grabsteine Problem: Daten auf Formularebene Loesung: Methoden auf Formularebene Problem zur Zweiten: back-button –Loesung ab 7.1

26 www.mobile-developer-conference.de /mdc_conference | #mdc12 Code - I public partial class MainPage : PhoneApplicationPage { bool myIsNewPageInstance=false; // Constructor public MainPage() { InitializeComponent(); myIsNewPageInstance = true; }

27 www.mobile-developer-conference.de /mdc_conference | #mdc12 Code - II protected override void OnNavigatedFrom(System.Windows.Navigation.Navig ationEventArgs e) { if (e.NavigationMode != System.Windows.Navigation.NavigationMode.Back) { State["Textbox"] = textBox1.Text; }

28 www.mobile-developer-conference.de /mdc_conference | #mdc12 Code - III protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { // Konstruktor aufgerufen? if (myIsNewPageInstance) { try { //Invokation erfolgt auch direkt nach Konstruktion. textBox1.Text = (string)State["Textbox"]; } catch (Exception ex) { } } myIsNewPageInstance = false; }

29 www.mobile-developer-conference.de /mdc_conference | #mdc12 Debugging leicht gemacht

30 www.mobile-developer-conference.de /mdc_conference | #mdc12 Eine Demo

31 www.mobile-developer-conference.de /mdc_conference | #mdc12 Ein Helferlein Erleichtert die Persistierung von Controls –CheckBox / Radio button –List Box –PasswordBox / TextBox –Scroll viewer –Slider h ttp://tombstonehelper.codeplex.com/

32 www.mobile-developer-conference.de /mdc_conference | #mdc12 SQL to go

33 www.mobile-developer-conference.de /mdc_conference | #mdc12 Wie funktionierts

34 www.mobile-developer-conference.de /mdc_conference | #mdc12 Wie funktionierts - II Objekteigenschaften -> Columns Objekte liegen in Tabellen Tabellen liegen in Datenbank

35 www.mobile-developer-conference.de /mdc_conference | #mdc12 Wie funktionierts - III Bezug zueinander durch Schluessel

36 www.mobile-developer-conference.de /mdc_conference | #mdc12 Persoenliche Meinung LINQ to SQL is evil –Ewige Bindung an Microsoft –Keine Skalierbarkeit –Keine Trennung der Concerns Aber: there is no bigger choice ;( –OS-Engines

37 www.mobile-developer-conference.de /mdc_conference | #mdc12 Housekeeping

38 www.mobile-developer-conference.de /mdc_conference | #mdc12 Die Datenklasse [Table] public class TamsClass { [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)] public int myItemId; [Column(IsVersion = true)] private System.Data.Linq.Binary _version; [Column] public string myItemName; [Column] public bool myIsComplete; }

39 www.mobile-developer-conference.de /mdc_conference | #mdc12 Die Datenklasse - II Tag Table: –Dieses Objekt wird eine Tabelle –Klasse heisst entity class Tag Column –Dieses Attribut ist eine Tabellenspalte –IsPrimaryKey: Schluessel

40 www.mobile-developer-conference.de /mdc_conference | #mdc12 Data Context - I public class TamsDataContext:DataContext { public string myConnStr; public TamsDataContext(string connStr) : base(connStr) { myConnStr = connStr; } public Table TamsClasses { get { return this.GetTable (); }

41 www.mobile-developer-conference.de /mdc_conference | #mdc12 Data Context - II using System.Data.Linq; using System.Collections.Generic; using System.Linq;

42 www.mobile-developer-conference.de /mdc_conference | #mdc12 Alle Elemente auslesen public IList GetItems() { List list = new List (); using (var db = new TamsDataContext(myConnStr)) { var query = from e in db.TamsClasses select e; list = query.ToList(); } return list; }

43 www.mobile-developer-conference.de /mdc_conference | #mdc12 Element hinzufuegen public void AddSth(TamsClass _victim) { using (var db = new TamsDataContext(myConnStr)) { db.TamsClasses.InsertOnSubmit(_victim); db.SubmitChanges(); }

44 www.mobile-developer-conference.de /mdc_conference | #mdc12 Datenbank erstellen public partial class MainPage : PhoneApplicationPage { TamsDataContext myTDC; public MainPage() { InitializeComponent(); myTDC = new TamsDataContext("Data Source=isostore:/TamsDB.sdf"); using (var db = myTDC) { if (!db.DatabaseExists()) db.CreateDatabase(); } IList myItems=myTDC.GetItems(); myItems = myItems; }

45 www.mobile-developer-conference.de /mdc_conference | #mdc12 Ta-Da!

46 www.mobile-developer-conference.de /mdc_conference | #mdc12 Daten als Ressourcen Datenbank von Haus aus bevoelkern Zwei Moeglichkeiten –Data as Code –Datenbankdatei

47 www.mobile-developer-conference.de /mdc_conference | #mdc12 Daten als Ressourcen - II Datenbankdatei: 1.Hilfsapplikation generiert DB 2.ISETool.exe holt Datei aus IST 3.Als Ressource mitliefern (read-only!) 4.In Hauptapplikation umkopieren

48 www.mobile-developer-conference.de /mdc_conference | #mdc12 Live Coding Beziehungen

49 www.mobile-developer-conference.de /mdc_conference | #mdc12 Was realisieren wir?

50 www.mobile-developer-conference.de /mdc_conference | #mdc12 Mehr Informationen LINQ to SQL kann sehr viel –Datenbank verschluesseln –Beziehungen abbilden –Aenderungen automatisch tracken Einfuehrung: 120p auf MSDN http://msdn.microsoft.com/en- us/library/bb425822.aspx

51 www.mobile-developer-conference.de /mdc_conference | #mdc12 Photo ins Album

52 www.mobile-developer-conference.de /mdc_conference | #mdc12 Problem Das Photoalbum des Benutzers ist nicht wirklich schreibbar Kamerainteraktion primaer via Chooser

53 www.mobile-developer-conference.de /mdc_conference | #mdc12 Loesung Was Silverlight nicht kann, kann oft XNA MediaLibrary-Objekt –Erwartet Byte-Array –Schreibt immer in Saved Pictures

54 www.mobile-developer-conference.de /mdc_conference | #mdc12 Word aus Resource

55 www.mobile-developer-conference.de /mdc_conference | #mdc12 Problem Word-Dateien, etc ins Office schreiben –Dank Isolated Storage unmoeglich Idee: aus e-mail resusciieren

56 www.mobile-developer-conference.de /mdc_conference | #mdc12 Loesung Off-Site-Service Uebertragung von Adresse & Attachment Server sendet e-mail

57 www.mobile-developer-conference.de /mdc_conference | #mdc12 Tam HANNA (@tamhanna) Tamoggemon Limited tamhan@tamoggemon.com www.tamoggemon.com


Herunterladen ppt "Www.mobile-developer-conference.de /mdc_conference | #mdc12 Tam HANNA Tamoggemon Limited Datenpersistenz mit Windows Phone 7."

Ähnliche Präsentationen


Google-Anzeigen