Desenvolvimento - Mobile

Inserindo, editando e lendo dados no Windows Phone com IsolatedStorageSettings

Veja neste artigo como gravar informações da aplicação no aparelho através da classe IsolatedStorageSettings do Windows Phone 7.

por Welington Lourenço Melo de Paula



A maioria das aplicações, mesmo as mais simples, podem necessitar gravar dados no aparelho, seja para fazer alguma validação, armazenar configurações, “score” de jogos, preferências de usuários, etc.

O Windows Phone 7 permite que estes dados ou configurações sejam armazenadas no aparelho sem que o usuário tenha acesso ao seu sistema de arquivos. Em função disso, o armazenamento desta forma se torna seguro, pois o usuário não poderá acessar diretamente os dados gravados.

Então vamos construir uma pequena aplicação para gravar, ler e apagar informações no aparelho, utilizando a classe IsolatedStorageSettings.

Criaremos uma aplicação usando o template “Silverlight for Windows Phone”, “Windows Phone Application” e daremos o nome “ArmazenarDados” ao projeto.

Mudaremos o primeiro título para “Isolated Storage”, e o segundo título para “Armazenar”. Vamos inserir três textBlock´s, três TextBox´s e três botões, alinhar os TextBlock´s e os TextBox´s a esquerda e alternar entre um TextBlock e um TextBox, alterando a propriedade “text” dos TextBlock´s para Nome, Endereço e Telefone respectivamente. Na propriedade “text” dos TextBlox´s deixaremos em branco e os três botões nós vamos alterar a propriedade “content” e a propriedade “nome” para Gravar, Ler e Apagar, dispondo os botões Gravar e Ler logo abaixo do último TextBox e o botão Apagar colocaremos centralizado, abaixo dos botões Gravar e Ler, (Figura 1). Alteraremos também o nome de cada TextBox: TextBox1 para txtNome, TextBox2 para txtEndereco e TextBox3 para txtTelefone, pois precisaremos usar estes objetos e nomeá-los com expressões que melhor indicam a que estes objetos se referem. Esta é uma boa prática de programação.

Caso tenha dificuldade em seguir os passos anteriores substitua o conteúdo da Tag abaixo da inscrição em MainPage.xaml pelo código listado na Listagem 1.

Disposição dos objetos na tela do telefone.

Figura1: Disposição dos objetos na tela do telefone.

Listagem 1: Código da disposição dos objetos na tela do telefone.

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="10,10,0,0" Name="textBlock1" Text="Nome:" VerticalAlignment="Top" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="-4,30,0,0" Name="txtNome" Text="" VerticalAlignment="Top" Width="460" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="10,110,0,0" Name="textBlock2" Text="Endereço:" VerticalAlignment="Top" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="-4,130,0,0" Name="txtEndereco" Text="" VerticalAlignment="Top" Width="460" />
            <TextBlock Height="30" HorizontalAlignment="Left" Margin="10,210,0,0" Name="textBlock3" Text="Telefone:" VerticalAlignment="Top" />
            <TextBox Height="72" HorizontalAlignment="Left" Margin="-4,230,0,0" Name="txtTelefone" Text="" VerticalAlignment="Top" Width="460" />
            <Button Content="Ler" Height="72" HorizontalAlignment="Left" Margin="230,310,0,0" Name="Ler" VerticalAlignment="Top" Width="200" />
            <Button Content="Gravar" Height="72" HorizontalAlignment="Left" Margin="20,310,0,0" Name="Gravar" VerticalAlignment="Top" Width="200" />
            <Button Content="Apagar" Height="72" HorizontalAlignment="Left" Margin="126,390,0,0" Name="Apagar" VerticalAlignment="Top" Width="200" />
        </Grid>

Agora que o nosso layout está pronto, vamos partir para a codificação. Será necessário fazer referência ao namespace System.IO.IsolatedStorage, em MainPage.cs (Listagem 2). A classe responsável por acessar o Isolated Storage é a IsolatedStorageSettings através da propriedade ApplicationSettings.

Listagem 2: Referenciando ao namespace System.IO.IsolatedStorage

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO.IsolatedStorage;
using Microsoft.Phone.Controls;

namespace ArmazenarDados
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }
    }
}

Para gravar os itens da nossa aplicação, devemos criar uma chave para cada item, que serão isoNome, isoEndereco e isoTelefone respectivamente. Teremos que usá-las nos métodos click de cada um dos botões que criamos. Então acessem o botão gravar com um duplo clique, será aberto o código do evento click, então insira o código que está na Listagem 3. Este código fará a gravação das chaves que, no nosso caso, estão definidas como isoNome para Nome, isoEndereco para Endereço e isoTelefone para Telefone. Chaves são expressões que servem de referência para a informação a ser gravada, com os respectivos valores que são os dados propriamente ditos.

No início do código é instanciada a classe IsolatedStorageSettings através do objeto iso, depois fazemos uma verificação para confirmar se a chave já existe, existindo a chave vamos atribuir o novo valor a esta chave e se não existir, criamos a chave já atribuindo o valor a ela. No final vamos salvar os dados usando o método Save().

Listagem 3: Código do método click do botão Gravar

     private void Gravar_Click(object sender, RoutedEventArgs e)
        {
            IsolatedStorageSettings iso = IsolatedStorageSettings.ApplicationSettings;

            if (iso.Contains("isoNome"))
            {
                iso["isoNome"] = txtNome.Text;
            }
            else
            { 
                iso.Add("isoNome", txtNome.Text);
            }

            if (iso.Contains("isoEndereco"))
            {
                iso["isoEndereco"] = txtEndereco.Text;
            }
            else
            {
                iso.Add("isoEndereco", txtEndereco.Text);
            }

            if (iso.Contains("isoTelefone"))
            {
                iso["isoTelefone"] = txtTelefone.Text;
            }
            else
            {
                iso.Add("isoTelefone", txtTelefone.Text);
            }

            iso.Save();
        }

Vamos gerar o código do botão Ler, que está na Listagem 4. Para buscar o retorno das chaves que gravamos, usamos o método TryGetValue da classe IsolatedStorageSettings. Este método recebe como parâmetro o nome da chave e tem como retorno o conteúdo desta chave caso ela seja encontrada. É necessário informar o tipo de dado que será retornado, nestes casos , por isso foi necessário fazer a declaração de três variáveis do tipo string (retornaNome, retornaEndereco e retornaTelefone) para que estas variáveis possam receber o retorno do método.

Listagem 4: Código do método click do botão Ler

private void Ler_Click(object sender, RoutedEventArgs e)
        {
            IsolatedStorageSettings iso = IsolatedStorageSettings.ApplicationSettings;

            string retornaNome, retornaEndereco, retornaTelefone;

            if(iso.TryGetValue<string>("isoNome", out retornaNome)
            {
                txtNome.Text = retornaNome;
            }

            if(iso.TryGetValue<string>("isoEndereco", out retornaEndereco)
            {
                txtEndereco.Text = retornaEndereco;
            }
            if(iso.TryGetValue<string>("isoTelefone", out retornaTelefone)
            {
                txtTelefone.Text = retornaTelefone;
            }
        }

Está faltando o botão Apagar, então vamos à codificação (Listagem 5). É importante esclarecer que este botão remove as chaves criadas, então basicamente vamos atribuir um string vazio aos objetos txtNome.Text, txtEndereco.Text e txtTelefone.Text e depois verificar se existe uma chave a ser excluída com o método Contains, passando como parâmetro o nome da chave e depois fazer a exclusão da chave usando o método Remove.

Listagem 5: Código do método click do botão Apagar

private void Apagar_Click(object sender, RoutedEventArgs e)
        {
            IsolatedStorageSettings iso = IsolatedStorageSettings.ApplicationSettings;

            txtNome.Text = "";
            txtEndereco.Text = "";
            txtTelefone.Text = "";

            if (iso.Contains("isoNome"))
            {
                iso.Remove("isoNome");
            }

            if (iso.Contains("isoEndereco"))
            {
                iso.Remove("isoEndereco");
            }

            if (iso.Contains("isoTelefone"))
            {
                iso.Remove("isoTelefone");
            }
        }

É isso aí, agora vamos executar o código para ver a nossa aplicação funcionando, como exercício vocês podem criar um botão limpar, onde poderão limpar os objetos para facilitar o teste do botão Ler. Até o próximo artigo.

Welington Lourenço Melo de Paula

Welington Lourenço Melo de Paula - Welington Lourenço(welingtonl@gmail.com) é desenvolvedor, trabalha com análise e desenvolvimento de sistemas em Visual Fox Pro desde 1995, desde 2000 atua com desenvolvimento de sistemas com acesso a banco de dados (Sql Server, MySql, Oracle). Hoje trabalha na MCJ Assessoria Hospitalar e informática.