none
Daten Permanent speichern (IsolatedStorage) RRS feed

  • Frage

  • Hallo Windows Phone Community!

    Ich versuche gerade meine erste App für Windows Phone 8.1 zu entwickeln.

    Dies tue ich auf einem Rechner auf dem ebenfalls Win 8.1 fährt. Programmiert wird in C# mit Visual Studio 2013 Professional Update 4.

    Es handelt sich dabei um eine einfache Einkaufslisten App. Ich möchte einfach nur eine Liste erstellen und die permanent speichern. Nach ausgibiger Internetrecherche kam ich zu dem Ergebniss das IsolatedStorage wohl hierfür geeigent sei.

    Beim Einbinden des IsolatedStorage über

    using System.IO.IsolatedStorage

    tauchte jedoch das erste Problem auf Visual Studio kennt keinen IsolatedStorage unter IO. Nach weiterer Recherche habe ich dann rausgefunden das

    using System.IO.IsolatedStorage

    veraltet ist. Mit Windows Phone 8.1 wurde das ganze wohl mit den Windows.Storage APIs ersetzt. Das prinzip ist das selbe nur wird nicht mehr direkt auf den IsolatedStorage zugegriffen habe ich das richtig Verstanden ?

    Ich muss gestehen, als Anfänger, finde ich das ganze etwas Undurchsichtig. Sehe ich das richtig das MS für Windows Phone Store, Windows Desktop Store, Windows Universal APP usw jeweils verschiedene APIs hat ? Woher bekomme ich als Entwickler mit wenn sich irgenwo etwas ändert? Siehe mein IsolatedStorage Problem nur um herauszufinden das meine Vorgehens weiße nicht mehr aktuell ist hat mich viel Zeit und Frust gekostet.

    Aber nun zu meiner eigentlichen Frage. Umso mehr ich mich mit Windows.Store API bzw. IsolatedStorage befasse umso unsicherer werde ich ob das, dass ist was ich brauche.

    Alle Beispiele die ich über den Windows.Storage gefunden habe insbesonder die MS Demo App Storage Recipes sample

    Arbeiten ausschließlich mit Strings. Ich möchte aber gerne eine Instanz eine Klasse Permanent speichern. Hatte mir das in etwas so vorgestellt. * Achtung Pseudo Code*

    class BuyingList{
    
    // Instanzvariablen
    String name;
    String description; 
    // In ItemList werden die einzelnen Artikel der //Einkaufsliste gespeichert
    List<Item> ItemList;
    
    //Konstruktor 
    // getter und setter Methoden
    
    
    }
    
    
    class Item{
    
    //Instanzvariablen
    String name;
    String description;
    float price;
    float weihgt;
    int amount;
    
    //Konstruktor
    //getter und setter Methoden
    
    
    }

    Beim klick auf einem Button "Liste erstellen" Wird mir eine neue Instanz der Klasse Buyinglist erstellt. Nun ruft die App eine neue Seite auf dort kann ich neue Items erstellen diese füge ich dann der erstellten Buyinglist hinzu.

    Diese Instanz der Buyinglist möchte ich nun permanent speichern, heißt beim schließen der App möchte ich dise Instanz mit den darin abgelegten Items behalten.
    Kann ich dies mit Windows.Storage machen ? wenn ja wie ? geht es vielleicht einfacher ? oder ist meine Denke komplett falsch ?

    über Tipps oder kurze Beispiele würde ich mich sehr freuen.

    Danke im Vorraus für die Antworten.

    Viele Grüße

    Sonntag, 19. Juli 2015 12:39

Antworten

  • So wie ich dich verstanden habe, willst du am einfachsten nur eine Datei lesen und schreiben.

    Dann wäre der Code am einfachsten so zu implementieren:

    using Windows.Storage;
    
    
    //
    // Datei zum Lesen/Schreib öffnen
    // Dazu die Klasse ApplciationData verwenden:
    // https://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdata.aspx
    //
    
    // Wir verwenden den lokalen Ordner
    var dir = ApplicationData.LocalFolder;
    
    // Die Datei wird neu erstellt oder geöffnet, wenn sie schon da ist.
    var file = await dir.CreateFileAsync(
    "buyinglist.txt", CreationCollisionOption.OpenIfExists
    );
    
    
    // Schreiben kannst du mit folgendem Aufruf:
    // (Achtung! Alte Daten werden dabei überschrieben)
    await FileIO.WriteTextAsync(file, "Dein Dateitext...");
    
    // Lesen geht wiederum mit dieser API
    // Der gesamte Text der Datei wird in ->content reingeschrieben.
    string content = await FileIO.ReadTextAsync(file);
    
    // Für weitere Funktionen, schau dir bitte folgendes an:
    // https://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.fileio.aspx
    So, ich hoffe diese kurze Einführung konnte dir etwas helfen.

    Du musst nur noch deine Klasse in einem string und wieder zurück verwandlen können.

    Hast du schon mal an JSON-Serialsierung gedacht?


    © 2015 Thomas Roskop
    Germany //  Deutschland

    Sonntag, 19. Juli 2015 13:49

Alle Antworten

  • So wie ich dich verstanden habe, willst du am einfachsten nur eine Datei lesen und schreiben.

    Dann wäre der Code am einfachsten so zu implementieren:

    using Windows.Storage;
    
    
    //
    // Datei zum Lesen/Schreib öffnen
    // Dazu die Klasse ApplciationData verwenden:
    // https://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdata.aspx
    //
    
    // Wir verwenden den lokalen Ordner
    var dir = ApplicationData.LocalFolder;
    
    // Die Datei wird neu erstellt oder geöffnet, wenn sie schon da ist.
    var file = await dir.CreateFileAsync(
    "buyinglist.txt", CreationCollisionOption.OpenIfExists
    );
    
    
    // Schreiben kannst du mit folgendem Aufruf:
    // (Achtung! Alte Daten werden dabei überschrieben)
    await FileIO.WriteTextAsync(file, "Dein Dateitext...");
    
    // Lesen geht wiederum mit dieser API
    // Der gesamte Text der Datei wird in ->content reingeschrieben.
    string content = await FileIO.ReadTextAsync(file);
    
    // Für weitere Funktionen, schau dir bitte folgendes an:
    // https://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.fileio.aspx
    So, ich hoffe diese kurze Einführung konnte dir etwas helfen.

    Du musst nur noch deine Klasse in einem string und wieder zurück verwandlen können.

    Hast du schon mal an JSON-Serialsierung gedacht?


    © 2015 Thomas Roskop
    Germany //  Deutschland

    Sonntag, 19. Juli 2015 13:49
  • Der Vorschlag von Thomas Roskop ist schon sehr gut. Halte auch die Serialisierung in einen JSON-String für sinnvoll. Empfehlen kann ich da die Newtonsoft.Json-Bibliothek, die auch für WP 8 verfügbar ist (bin mir jetzt nicht 100% sicher, ob auch für 8.1). Da kannst du dein BuyingList-Objekt mit nur einer Codezeile in einen String serialisieren und anschließend in eine Datei speichern (ähnlich wie Thomas Roskop beschrieben).

    string serializedBuyingList = Newtonsoft.Json.JsonConvert.SerializeObject(buyingListObject);

    Montag, 20. Juli 2015 08:05