Comment persister les données sous WP7 ?

Conserver des données sur le téléphone est le commun d’une grande majorité des applications, pour ne pas dire toutes les applications mobiles. Dans Windows Mobile, l’application avait accès à l’intégralité du système de fichiers du terminal, ce qui rendait la tâche assez similaire à ce qui se fait sous Windows. Sous Windows Phone 7, on se rapproche plus de ce qui se fait dans Silverlight pour PC / Mac ; aucun accès au système de fichiers, et encore moins à la base de registre de l’appareil. Tout, ou presque, passe par l’IsolatedStorage.

L’IsolatedStorage est un espace de stockage qui comme son nom le suggère est isolé des espaces de stockage des autres applications. Il ne sera donc pas question de partager les fichiers de l’application A avec l’application B. Ou presque. En effet certains fichiers gérés par les hubs de Windows Phone 7, pourront être accessibles par toutes les applications qui veulent étendre le hub en question. Pour l’instant il est surtout question du Hub photos, mais qui sait peut-être sera-t-il possible à l’avenir d’étendre d’autre hubs, voir même d’étendre les applications.

Pour cet article je vais uniquement m’intéresser à l’accès à l’IsolatedStorage et à la configuration des applications grâce à l’IsolatedStorageSettings.

L’Isolated Storage

Tout ce qui concerne l’utilisation de l’IsolatedStorage se trouve dans l’espace de nom System.IO.IsolatedStorage. Pour commencer il faut récupérer la racine des fichiers ; pour cela une seule façon de faire, appeler la méthode statique GetUserStoreForApplication de la classe IsolatedStorageFile qui renvoie une instance de cette même classe.

IsolatedStorageFile root = IsolatedStorageFile.GetUserStoreForApplication();

Cet objet remplace les traditionnelles classes File et Directory du framework .NET. On peut par exemple vérifier la présence d’un fichier ou d’un dossier avec les méthodes FileExists et DirectoryExists. On peut également créer de nouveaux dossiers et fichiers (CreateDirectory et CreateFile), obtenir la liste des fichiers et dossiers (GetFileNames et GetDirectoryNames) et finalement ouvrir un fichier en lecture ou en écriture à l’aide de la méthode OpenFile et de la classe IsolatedStorageFileStream.

IsolatedStorageFileStream fs = root.OpenFile("file.xml", System.IO.FileMode.Open);

L’IsolatedStorageFileStream s’apparente à un FileStream classique et permet donc d’exécuter toutes les opérations habituelles, lire, écrire, repositionner le curseur, et pour finir fermer le flux. Il peut également être utilisé au travers d’un StreamWriter ou d’un StreamReader, respectivement pour lire ou écrire plus facilement dans le fichier.

L’IsolatedStorageFile permet donc de gérer tout l’espace de fichier réservé à l’application. Il s’apparente en beaucoup d’aspects aux APIs de .NET en matière de gestion de fichiers. En revanche, l’IsolatedStorage d’une application est limitée en taille. Il est donc nécessaire de vérifier le Quota via la propriété du même nom. A priori une application ne devra pas dépasser les 2Go de mémoire sur le téléphone, ce qui paraît déjà être une limite assez haute. Attention également, quand l’utilisateur supprimera l’application, il effacera du même coup toutes les données de l’application.

La configuration des applications

Pour gérer les paramètres de l’application, la solution que je viens de détailler paraît un peu lourde. C’est pour cela qu’existe l’IsolatedStorageSettings. Ce n’est ni plus ni moins qu’un dictionnaire persisté sur l’IsolatedStorage. Les clés sont des chaînes de caractères, et les valeurs sont les objets à persister. La classe IsolatedStorageSettings est donc idéale pour conserver la configuration de vos applications.

IsolatedStorageSettings.ApplicationSettings["Key"] = "Value";

Pour toute autre information, la MSDN est comme toujours d’une grande aide : http://msdn.microsoft.com/en-us/library/ff402541%28VS.92%29.aspx

Qu’en est-il de SQL Compact ?

Enfin la grande question, existe-t-il une version de SQL Compact disponible sur WP7 ? Hélas non, du moins pas pour le moment. Il existe en revanche un certain nombre de personnes qui se sont penché sur le sujet, en open-source ou non.

Publicités

4 Responses to Comment persister les données sous WP7 ?

  1. Ping: La bibliothèque Silverlight Database « Sebastien Mornas's Blog

  2. Moez says:

    Salut ,
    j’arrive a stoker et afficher les données avec isolated storage et d’exécuter des requêtes Linq pour faire une simple recherche mais lorsque je redémarre mon PC et j’exécute de nouveau mon application je trouve pas les anciens données !!
    j’ai la methode Load mais j’arrive pas comment l’appeler au chargement de l’application !!
    merci bien pour votre compréhension 🙂

    • smornas says:

      Bonjour Moez,
      C’est tout à fait normal, car l’IsolatedStorage de l’émulateur est vidé à chaque fois que vous le fermez, et donc dès que vous redémarrez votre PC ! Vous pouvez vérifier sur un Windows Phone, les données ne seront pas perdues, même lors d’un redémarrage.

  3. Ping: SQL CE pour WP7 « MarweN Boughattas : the blog

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :