1

Ich verwende IsolatedStorageSettings.ApplicationSettings für meine Anwendung. Die gesamte Code im Zusammenhang mit isolierten Speichern tritt in meinem Application_Launching, Application_Activated, Application_Closing und Application_Deactivated Methoden wie folgt:Warum isoliert der isolierte Speicher nicht in meiner WP7-Anwendung?

public IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; 


private void Application_Launching(object sender, LaunchingEventArgs e) 
{ 
     if (settings.Contains("myObjList")) 
     { 
      App.ObjList = (ObservableCollection<myObj>)settings["myObjList"]; 
     } 
     else 
     { 
      settings.Add("myObjList", App.ObjList); 
     } 
} 

private void Application_Activated(object sender, ActivatedEventArgs e) 
{ 
    if (settings.Contains("myObjList")) 
    { 
     App.ObjList = (ObservableCollection<myObj>)settings["myObjList"]; 
    } 
    else 
    { 
     settings.Add("myObjList", App.ObjList); 
    } 
} 
private void Application_Deactivated(object sender, DeactivatedEventArgs e) 
{ 

    settings["myObjList"] = App.ObjList; 
    settings.Save(); 
} 
private void Application_Closing(object sender, ClosingEventArgs e) 
{ 
    settings["myObjList"] = App.ObjList; 
    settings.Save(); 
} 

All dies wird in der App.xaml.cs Datei auftritt, die standardmäßig mit jeder neuen Anwendung erstellt wird .

Ich habe versucht, die Anwendung mit der Zurück-Taste sowie mit der Windows-Taste beenden. Nachdem ich den Emulator laufen gelassen habe, habe ich versucht, die Anwendung erneut zu öffnen, indem ich den Zurück-Knopf benutze und zur Anwendungsliste navigiere und öffne.

Das Problem, das ich habe, ist, dass beim Laden oder Aktivieren der Einstellungen.Contains ["myObjList"] false zurückgibt und fortfahren, den Schlüssel den Einstellungen noch einmal hinzuzufügen.

Kann jemand sehen, warum meine Einstellungen Schlüssel (und Wert) nicht bestehen?

Antwort

2

Ich sehe einige Probleme:

  1. Die IsolatedStorageSettings doc sagt ausdrücklich nicht Speichern() aufzurufen, da es (für WP nach unten scrollen, um die Plattform Notes) ist nicht Thread-sicher und kann eine Ausnahme auslösen (und die Einstellungen werden nicht gespeichert.

  2. Es scheint hier nicht der Fall zu sein, aber die Verwendung der Zeichenfolge "myObjList" rundherum ist ziemlich gefährlich, da sie einfach zu mispellieren ist. Ich würde es in eine Konstante setzen und Tippfehler ausschließen

  3. In my experience IsolatedStorageSettings ist nicht sehr robust auf der aktuellen WP7-Version. Sie erstellen besser eine Klasse und serialisieren sie in einer IsolatedStorage-Datei. Wenn Sie mit Ihrer App fortfahren, werden Sie wahrscheinlich mehr Dinge zu speichern haben und Sie werden saubereren Code auf diese Weise haben.

+0

Danke für den tollen Rat! Ich benutze die myObjList nicht wirklich. Ich stelle das einfach als mein Beispiel auf. Was Ihre anderen Punkte betrifft, werde ich diese berücksichtigen. – andersra

+0

Würde es Ihnen auch etwas ausmachen, mich mit einem Tutorial/Beispiel # 3 zu verbinden? Ich bin ratlos, ob ich für XML-Serialisierung oder binäre gehen sollte ... – andersra

+0

Dies wird Sie auf IsolatedStorage starten: http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone- 7c-Day-15-Isolated-Storage.aspx und dies gibt ein gutes Beispiel für den DataContractSerializer: http://onishimura.com/2010/07/25/windows-phone-7-tutorial-creating-a-simple-notes -app-with-silverlight-part-1/ –

3

Ist Ihre Klasse myObj serialisierbar? Aus Erfahrung, wenn es nicht ist, wird kein Fehler geworfen, es wird einfach nicht zu IsolatedStorage hinzugefügt.

Sie können die Attribute DataContract und DataMember in Ihrer Klasse verwenden, um dies wie folgt zu aktivieren.

[DataContract] 
public class myObj 
{ 
    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public string Id { get; set; } 

    [DataMember] 
    public string Phone { get; set; } 
+0

Danke für die Hilfe! Das hat mich ein bisschen weiter gebracht, ich werde ein bisschen mehr experimentieren und sehen, was ich daraus mache. – andersra