Posts destacados

Nuevo libro de desarrollo para Windows 8 y Windows Phone 8Nuevo libro de desarrollo para Windows 8 y Windows... Desde hace tiempo, estoy un poco alejado del mundanal ruido de blogs, twitter y demás. La razón no ha sido otra que hacer posible un deseo que tenia desde hace mucho tiempo,...

Read more

Preparándonos para el #MegathonW8 y II – Instalando las herramientas de desarrollo.Preparándonos para el #MegathonW8 y II –... Una vez que ya tenemos nuestro flamante Windows 8 instalado en nuestro disco duro virtual, según los pasos del primer capitulo de esta guía. Lo que debemos de hacer es instalarnos...

Read more

Preparándonos para el #MegathonW8 y I Instalación de Windows 8 en un VHDPreparándonos para el #MegathonW8 y I Instalación... Este es el primer post de una serie de ellos cuya intención es facilitar a los asistentes al megathon que se celebrara en breve, las instrucciones necesarias para conocer...

Read more

Beca para el Megathon Windows 8Beca para el Megathon Windows 8 Como seguramente todos ya sabréis, los próximos días 7, 8 y 9 de Septiembre se celebrara en varias ciudades españolas al mismo tiempo un hackathon sobre desarrollo para...

Read more

[OFFTOPIC] Oferta de trabajo.[OFFTOPIC] Oferta de trabajo. Madre mía, hasta ahora realmente no me había dado cuenta de lo abandonado que tengo mi blog, como pasa el tiempo de rápido por dios… Demasiadas cosas a hacer tanto dentro...

Read more

Windows Phone y .NET Rss

Almacenamiento en Windows Phone 7 – Isolated Storage

Posteado el : 22-01-2011 | Por : tecnologia | En : Windows Phone 7

22

Creo que la forma de trabajar con cualquier dispositivo móvil, y mas si estos disponen de conexión continua a Internet, es exactamente esa la conexión directa con los servicios de datos para obtener cualquier información. Si bien es cierto que en algún momento vamos a tener que guardar algo de información en nuestro propio aparato, ya sean algunos datos de configuración de la aplicación que estemos desarrollando o cualquier cacheo de datos por ejemplo.

Para ello, WP7, dispone de un almacenamiento, denominado Isolated Storage por aplicación, que tiene las siguientes características:

  • Como las propias palabras dicen “Isolated Storage”, este almacenamiento es totalmente aislado de cualquier otra aplicación. Como ya sabréis los programas son ejecutados en una especie de SandBox, en la cual no disponen de acceso a ningún recurso de cualquier otra aplicación.
  • Aunque es bien cierto el primer punto, disponemos de un almacenamiento “especial”, el cual si puede ser compartido y accesible por cualquier aplicativo, es el MediaLibrary. Pero de eso hablare mas adelante.
  • Cada aplicación dispone para almacenamiento de todo el espacio disponible para el dispositivo en cada momento. Es decir no tenemos un espacio reservado. Hay que tener en cuenta que no sabremos nunca donde se guarda la información, (bueno a medias), lo que quiero decir es que en dispositivos con tarjetas MicroSD de memoria externa, no sabremos si la información es guardada en la memoria interna del propio teléfono o es guardada en la MicroSD, ya que el sistema junta ambos espacios formando una especie de Raid 0, no distinguiendo para el usuario uno u otro. A lo que quiero llegar es que si queremos guardar cierta información directamente en la MicroSD, directamente no vamos a poder hacerlo. De momento.

Con todas esas consideraciones iniciales, vamos a explicar como funciona y como se almacena y se lee en este espacio.

Para empezar debemos de tener en cuenta que vamos a utilizar el namespace System.IO.IsolatedStorage. Este namespace nos ofrece dos tipos de forma de almacenamiento, para ello utilizaremos las clases “IsolatedStorageSettings” y la clase “IsolatedStorageFile”.

Utilización de “IsolatedStorageSettings”.

Principalmente esta clase la utilizaremos cuando queramos guardar los datos de la configuración de nuestra aplicación, el nombre de la propia clase nos da alguna que otra pista. ¿Por que la configuración?, bueno realmente con ella podremos guardar lo que nos apetezca pero concretamente esta clase esta preparada y diseñada para guardar esta información debido a que nos proporciona una IDictionary de tipo clave-valor, “Dictionary(Of TKey, TValue)“, llamado “ApplicationSettings” el cual automáticamente nos busca el espacio de almacenamiento e interacciona con el. Eso nos facilita mucho la labor de guardar y leer datos simples.

Por ejemplo, vamos a crear una clase que nos ayude, con dos métodos para leer y grabar la configuración de nuestra aplicación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  public class Configuracion
  {
    public static string Leer(string clave)
    {
      string Resultado = "";
      if (IsolatedStorageSettings.ApplicationSettings.Contains(clave))
      {
        Resultado = IsolatedStorageSettings.ApplicationSettings[clave].ToString();
      }
      return Resultado;
    }
 
    public static void Grabar(string clave, string valor)
    {
      IsolatedStorageSettings.ApplicationSettings[clave] = valor;
    }
  }

De esta manera tan sencilla estamos grabando y leyendo cadenas de texto en nuestro almacen particular. Obviamente esto es un mero ejemplo para que se entienda el funcionamiento, para realizar algo mas eficaz deberiamos de poder guardar cualquier cosa como valor dentro de nuestro diccionario, para ello modificamos la clase para dejarla de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  public class Configuracion
  {
    public static T Leer<T>(string clave)
    {
      T Resultado = default(T);
      if (IsolatedStorageSettings.ApplicationSettings.Contains(clave))
      {
        Resultado = (T)IsolatedStorageSettings.ApplicationSettings[clave];
      }
      return Resultado;
    }
 
    public static void Grabar<T>(string clave, T valor)
    {
      if (IsolatedStorageSettings.ApplicationSettings.Contains(clave))
      {
        IsolatedStorageSettings.ApplicationSettings[clave] = valor;
      }
      else
      {
        IsolatedStorageSettings.ApplicationSettings.Add(clave, valor);
      }
 
      IsolatedStorageSettings.ApplicationSettings.Save();
    }
  }

En algunas ocasiones, en el método de grabación se debe de indicar el método “Save” del IDictionary. Esto puede resultar un tanto extraño ya que la clase IsolatedStorageSettings implícitamente ya guarda la información del diccionario en el momento de asignar un valor, pero debemos de remarcar la grabación ya que es el único momento en donde nos puede sorprender con una excepción de la clase “IsolatedStorageException“, normalmente por espacio insuficiente, en cualquier otro lugar esta excepción será mas genérica tirando de “System” o “System.Collections“.

Indagando un poco en la depuración podemos ver que “IsolatedStorageSettings” no es mas que una clase especial que deriva de “IsolatedStorageFile“. Si nos vamos un poco mas allá, podemos decir que la estructura del almacenamiento de nuestro WP7 es “\Aplications\Data\(ID Aplicación)\Data\IsolatedStore” en donde “Id Aplicación” es el SandBox de nuestra propio programa, siendo en este caso “C4EFD08D-D2A8-4595-966F-435E7722E9DF”.

Como vemos que todo deriva de “IsolatedStorageFile“, vamos pues a ver como funciona esta otra clase que nos facilita para el almacenamiento.. Pero bueno eso lo dejamos para el próximo día. Aquí os dejo un vídeo en donde se explica de igual forma el uso de “IsolatedStorageSettings“.

Imagen de previsualización de YouTube

Aquí podréis descargar el código fuente de una pequeña aplicación que hace uso de la clase creada anteriormente.

Referencias:

IsolatedStorage overview for Windows Phone

Steve’s Weblog – Isolated Storage en WP7

Codigo Fuente:

Aplicacion Almacenamiento en WP7.

Print Friendly

Share

Comentarios (22)

[...] This post was mentioned on Twitter by Javi López González, Rafa Serna. Rafa Serna said: Nueva entrada en mi blog: "Almacenamiento en Windows Phone 7 – Isolated Storage" – http://bit.ly/fjf4Ni [...]

A wonderful job. Super helpful infroimaton.

Greetings! Very helpful advice within this article! It is the little
changes that produce the most important changes. Thanks for sharing!

Hello!
, , , , ,

Hello!
, , , , ,

Hello, all is going perfectly here and ofcourse every one is sharing information, that’s in fact fine, keep up writing.

Its like you read my mind! You appear to grasp a lot approximately this,
such as you wrote the guide in it or something.
I think that you simply could do with a few
p.c. to force the message house a little bit, however other than that,
this is great blog. A great read. I will definitely be back.

Hmm it appears like your blog ate my first comment
(it was extremely long) so I guess I’ll just sum it up what I wrote and say, I’m thoroughly enjoying your blog.
I too am an aspiring blog writer but I’m still new to everything. Do you have any helpful hints for first-time blog writers? I’d definitely appreciate
it.

Wow, superb blog layout! How long have you been blogging for?
you made blogging look easy. The overall
look of your website is great, as well as the content!

I’ve been browsing online more than 4 hours today, yet I never found any interesting article like yours. It’s
pretty worth enough for me. In my view, if all website owners and
bloggers made good content as you did, the net will be
much more useful than ever before.

Can I simply just say what a relief to find somebody
who genuinely knows what they are talking about over the internet.
You certainly know how to bring a problem to light and make it important.
A lot more people need to read this and understand
this side of the story. I was surprised that you are not more popular because you
surely have the gift.

Wonderful work! This is the kind of info that are meant to be shared around the internet.
Disgrace on Google for no longer positioning this post
upper! Come on over and consult with my website .
Thanks =)

I think this is one of the most significant information for me.
And i am glad reading your article. But wanna remark on few general things, The web site style
is ideal, the articles is really nice : D. Good job, cheers

Hey there! Do you know if they make any plugins to help with SEO?
I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very good results.
If you know of any please share. Thank you!

Great web site. Plenty of useful information here.
I am sending it to a few pals ans also sharing in delicious.
And certainly, thanks on your effort!

Muchas gracias por el articulo!

I have read so many articles or reviews on the topic of the blogger lovers except this post
is actually a good paragraph, keep it up.

Utilizar boas descrições, sugestões de acompanhamento e informações culturais e históricas sobre seu produto podem ser extremamente valiosas e agradáveis
para visitante acompanhar.

Get testimonials from the clients you already worked with, Find More Know-how About Upholstery Cleaning With One Of These Simple
Tips! few energy (Dorthy) your
work and experiences. Thirdly, the search engines need legit companies to do site optimization. I
am hoping to show you that I can help you achieve top rankings in the sites like I have for all my
other clients. Tests with a model like Page – Rank have shown that
the system is not infallible.

‘Are people really searching online for my product or services’.
Any business to conduct business on the web should
have a web site created especially for creating an awareness of their products and
ser-vices to the planet at large. Unlike TV, radio and other
traditional marketing channels that Need Your Carpet Cleaned?

What Could A Upholstery Cleaning Company Do To Suit Your Needs?

system running – Maynard – big budgets to be effective, SEO can be cost effective.
Webmaster follows a long process to promote a
website in top search engines (Google, Yahoo and Bing).

Escribe un comentario