O SDK do Windows Phone disponibiliza classes para armazenamento de dados das aplicações diretamente no aparelho do Windows Phone. Esses dados podem ser armazenados em bancos de dados, arquivos texto, binários ou mesmo em um espaço denominado IsolatedStorageSettings, que é o foco deste artigo, e cujo objetivo é permitir que o desenvolvedor armazene “chaves” com dados de configuração da própria APP, como por exemplo, estilos preferidos do usuário, comportamentos do software para uma situação X ou Y, usuário e senha para acesso a uma determinada APP, configurações de uma conta de e-mail, etc.
No exemplo deste post coloco uma situação onde o usuário deseja salvar suas informações de acesso para um determinado aplicativo, sendo assim, armazeno em duas chaves no IsolatedStorageSettings as informações correspondentes a autenticação do mesmo, ou seja, seu usuário e senha de acesso.
Na figura podemos observar a interface desenvolvida para o exemplo e identificamos que se o usuário marcar a opção “Lembrar meu usuário e senha” a aplicação então deverá realizar o armazenamento de seus dados de acesso.
Vamos ao código em C# que trata o evento Click do botão “Acesso”. Note que nesse exemplo o usuário e a senha para acesso na aplicação está fixa no código, mas é claro que você encontrará uma solução melhor para esse ponto 😉
private void btnAcesso_Click(object sender, RoutedEventArgs e) { if (txtUsuario.Text == "Admin" && txtSenha.Password == "123") { //Cria um objeto da classe IsolatedStorageSettings para armazenamento das chaves IsolatedStorageSettings iso = IsolatedStorageSettings.ApplicationSettings; if ((bool)ckbLembrar.IsChecked) { //É necessário perguntar se a chave já existe para evitar que se crie chaves duplicadas, o que fatalmente irá provocar erros if (iso.Contains("login.Usuario")) //Apenas atualiza os valores das chaves { iso["login.Usuario"] = txtUsuario.Text; iso["login.Senha"] = txtSenha.Password; } else //Cria novas chaves { iso.Add("login.Usuario", txtUsuario.Text); iso.Add("login.Senha", txtSenha.Password); } iso.Save(); //Necessário para armazenar os valores das chaves } else { //Caso o usuário não queira mais armazenar suas credenciais, podemos remover as chaves if (iso.Contains("login.Usuario")) { iso.Remove("login.Usuario"); iso.Remove("login.Senha"); } } //Direciona o usuário para uma página qualquer, caso ele acerte o login NavigationService.Navigate(new Uri("/Principal.xaml", UriKind.Relative)); } else { MessageBox.Show("Usuário = Admin ; Senha = 123"); } }
Recuperando os dados armazenados nas chaves do IsolatedStorageSettings
Para recuperar os valores das chaves armazenadas no IsolatedStorageSettings, você pode fazer uso do trecho de código apresentado abaixo:
... ... string usuario, senha; IsolatedStorageSettings iso = IsolatedStorageSettings.ApplicationSettings; if (iso.TryGetValue<string>("login.Usuario", out usuario)) txtUsuario.Text = usuario; if (iso.TryGetValue<string>("login.Senha", out senha)) { txtSenha.Password = senha; ckbLembrar.IsChecked = true; } ... ...
Grande abraço,
Eduardo Henrique Rizo
[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]
Pingback: Curso Windows Phone – Tópicos « Blog do Eduardo H. Rizo
Olá, Eduardo.
Eu tenho um pequeno problema, preciso alterar o valor de uma dessas chaves via ScheduledAgent, porém, verifico que sempre que tento alterar por lá, o valor não sofre alteração.
O que devo fazer?
Obrigado.
Daniel, tudo bom?
Chega da dar algum erro? Pode mandar um trecho do seu código onde você está tentando fazer o procedimento?
Olá, Eduardo, tudo sim.
Ele não mostra erro algum, simplesmente não guarda a informação. Eu estava usando para para guardar a última notícia que fosse notificada pelo app através de uma toast. Assim quando o app baixasse o feed novamente, ele iria notificar as notícias baixadas até encontrar a última notícia que foi notificada anteriormente. Em outros projetos, usei um arquivo .txt com o IsolatedStorageFile, mas vi que tava deixando a execução um pouco lenta. Mas com todos esse problemas, preferi adotar um sistema de notificações push, por isso não tenho mais o código pra poder mostrar.
Mas, obrigado pela ajuda. 🙂