1

J'utilise IsolatedStorageSettings.ApplicationSettings pour mon application. Tout le code associé à stockage isolé se produit dans mon Application_Launching, Application_Activated, Application_Closing et méthodes Application_Deactivated comme suit:Pourquoi le stockage isolé ne persiste-t-il pas dans mon application WP7?

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

Tout cela se produit dans le fichier App.xaml.cs qui est créé par défaut avec chaque nouvelle application .

J'ai essayé de quitter l'application en utilisant le bouton de retour ainsi qu'en utilisant le bouton Windows. Laissant l'émulateur en marche, j'ai essayé de rouvrir l'application en utilisant le bouton de retour, et de naviguer vers la liste des applications et l'ouverture. Le problème que je rencontre est que lors du chargement ou de l'activation, les paramètres .Contains ["myObjList"] renvoie false et procède à l'ajout de la clé des paramètres.

Est-ce que quelqu'un voit pourquoi ma clé de configuration (et sa valeur) ne persiste pas?

Répondre

2

Je vois quelques problèmes:

  1. Le IsolatedStorageSettings doc dit explicitement pas à STOCKER() parce qu'il est pas thread-safe (faites défiler les notes de la plate-forme pour WP) et peut soulever une exception (et ne pas enregistrer vos paramètres).

  2. Il semble que ce ne soit pas le cas ici, mais l'utilisation de la chaîne "myObjList" tout autour est assez dangereuse car elle est facile à mal orthographier. Je le mettrais dans une constante et exclurais toute erreur de frappe

  3. In my experience IsolatedStorageSettings n'est pas très robuste sur la version actuelle de WP7. Il vaut mieux créer une classe et la sérialiser dans un fichier IsolatedStorage. De toute façon, avec votre application, vous aurez probablement plus de choses à sauvegarder et vous aurez un code plus propre de cette façon.

+0

Merci pour le bon conseil! Je n'utilise pas réellement la myObjList que je viens de mettre en place comme mon exemple. En ce qui concerne vos autres points, je serai sûr de les prendre en considération. – andersra

+0

Aussi pourriez-vous me relier à un tutoriel/exemple de # 3? Je ne sais pas si je devrais aller pour la sérialisation xml ou binaire ... – andersra

+0

Cela vous aidera à démarrer sur IsolatedStorage: http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone- 7c-Day-15-Isolated-Storage.aspx et ceci donne un bon exemple de DataContractSerializer: http://onishimura.com/2010/07/25/windows-phone-7-tutorial-creating-a-simple-notes -app-with-silverlight-part-1/ –

3

Votre classe myObj est-elle sérialisable? De l'expérience si ce n'est pas alors aucune erreur ne sera lancée, elle n'est simplement pas ajoutée à IsolatedStorage.

Vous pouvez utiliser les attributs DataContract et DataMember dans votre classe pour l'activer comme suit.

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

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

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

Merci pour l'aide! Cela m'a amené un peu plus loin, je vais expérimenter un peu plus et voir ce que je propose. – andersra