Www.mobile-developer-conference.de /mdc_conference | #mdc12 Tam HANNA Tamoggemon Limited...

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

Transcript of Www.mobile-developer-conference.de /mdc_conference | #mdc12 Tam HANNA Tamoggemon Limited...

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

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

Tam HANNATamoggemon Limited

Datenpersistenz mitWindows Phone 7

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

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

Biographisches

• Tam HANNA– Gruender der

Tamoggemon Ltd– Betreiber von

Websites ueber Handhelds

– Fachautor– Programmierer

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

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

Hoehepunkte

• Die Basics ... und ...

• Bilder ins Photoalbum speichern• Dateien „resusciieren“• LINQ to SQL

• Tieffliegende Schokolade

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

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

Von Dateisystemen

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

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

Die “gute alte Zeit”

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

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

Page 7: Www.mobile-developer-conference.de /mdc_conference | #mdc12 Tam HANNA Tamoggemon Limited Datenpersistenz mit Windows Phone 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

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

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

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

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

Isolated Storage

Beispiel: MTPersistance1

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

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();

}

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

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(); }

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

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

Datei loeschen

private void CmdDel_Click(object sender, RoutedEventArgs e)

{ try { IsolatedStorageFile x =

IsolatedStorageFile.GetUserStoreForApplication();

x.DeleteFile("settings.tmgn"); }

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

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

Diverses - I

• IsolatedStorageFile enthaelt:– CreateDirectory– DeleteDirectory– etcetc

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

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?

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

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

Isolated Preferences

Beispiel: MTPersistance2

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

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“

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

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; }

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

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; } }

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

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); } }

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

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

Schluessel loeschen

private void CmdRem_Click(object sender, RoutedEventArgs e)

{

mySettings.Remove("Textbox");

}

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

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

States

Beispiel: MTPersistance3

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

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“

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

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!

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

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) { }

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

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

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

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

Code - I

public partial class MainPage : PhoneApplicationPage { bool myIsNewPageInstance=false;

// Constructor public MainPage() { InitializeComponent(); myIsNewPageInstance = true; }

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

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

Code - II

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)

{ if (e.NavigationMode !=

System.Windows.Navigation.NavigationMode.Back) { State["Textbox"] = textBox1.Text; } }

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

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;• }

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

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

Debugging leicht gemacht

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

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

Eine Demo

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

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

• http://tombstonehelper.codeplex.com/

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

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

SQL to go

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

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

Wie funktioniert‘s

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

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

Wie funktioniert‘s - II

• Objekteigenschaften -> Columns

• Objekte liegen in Tabellen

• Tabellen liegen in Datenbank

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

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

Wie funktioniert‘s - III

• Bezug zueinander durch Schluessel

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

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

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

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

Housekeeping

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

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; }

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

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

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

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<TamsClass> TamsClasses { get { return this.GetTable<TamsClass>(); } }

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

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

Data Context - II

• using System.Data.Linq;

• using System.Collections.Generic;

• using System.Linq;

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

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

Alle Elemente auslesen

public IList<TamsClass> GetItems() { List<TamsClass> list = new List<TamsClass>(); using (var db = new TamsDataContext(myConnStr)) { var query = from e in db.TamsClasses select e; list = query.ToList(); } return list; }

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

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(); } }

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

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<TamsClass> myItems=myTDC.GetItems(); myItems = myItems; }

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

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

Ta-Da!

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

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

Daten als Ressourcen

• Datenbank von Haus aus „bevoelkern“

• Zwei Moeglichkeiten– „Data as Code“– Datenbankdatei

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

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

Daten als Ressourcen - II

• Datenbankdatei:1. Hilfsapplikation generiert DB2. ISETool.exe holt Datei aus IST3. Als Ressource mitliefern (read-only!)4. In Hauptapplikation umkopieren

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

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

Live Coding

Beziehungen

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

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

Was realisieren wir?

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

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

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

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

Photo ins Album

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

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

Problem

• Das Photoalbum des Benutzers ist nicht wirklich „schreibbar“

• Kamerainteraktion primaer via Chooser

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

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“

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

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

Word aus Resource

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

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

Problem

• Word-Dateien, etc ins Office schreiben– Dank Isolated Storage unmoeglich

• Idee: aus e-mail resusciieren

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

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

Loesung

• Off-Site-Service

• Uebertragung von Adresse & Attachment

• Server sendet e-mail

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

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

Tam HANNA (@tamhanna)

Tamoggemon [email protected]

www.tamoggemon.com