Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Hrodulf Adler Geändert vor über 10 Jahren
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.