quinta-feira, 26 de abril de 2012

Android - Utilizando Shared Preferences


Olá Pessoal,


Hoje vou apresentar a classe SharedPreferences, ela fornece um recurso muito útil para nossos aplicativos que é a de ler e salvar pequenas informações de nosso sistema, como por exemplo, salvar o nome do usuário de uma tela de login, e é justamente este exemplo que será apresentado, a interface está bem simplificada apenas para ilustrar o recurso de salvar e recuperar o nome do usuário quando entramos e saímos em nosso aplicativo.

Como de costume abaixo seguem todos os fontes utilizados, eles já estão com comentários para facilitar no aprendizado.

Arquivo main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="Usuário:"
            android:typeface="monospace" 
            android:textAppearance="?android:attr/textAppearanceLarge" />


        <EditText
            android:id="@+id/etUsuario" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/textView1" >

            <requestFocus />
        </EditText>

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/etUsuario"
            android:text="  Senha:"
            android:typeface="monospace" 
            android:textAppearance="?android:attr/textAppearanceLarge" />


        <EditText
            android:id="@+id/etSenha"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/etUsuario"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/etUsuario"
            android:inputType="textPassword" />

        <CheckBox
            android:id="@+id/chkSalvar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/etSenha"
            android:text="Salvar preferência" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/chkSalvar"
            android:onClick="btnFechar_Click"
            android:text="Fechar programa" />

    </RelativeLayout>

</LinearLayout>


Arquivo PreferenceActivity.java
package br.com.EscolaDeAndroid;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;

public class PreferenceActivity extends Activity {
    public static final String PREFS_NAME = "Preferences";
    EditText etUsuario;
    EditText etSenha;
    
    /**Chamado quando a Activity é executada pela primeira vez.*/
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        etUsuario = (EditText)findViewById(R.id.etUsuario);
        etSenha = (EditText)findViewById(R.id.etSenha);
        
        //Restaura as preferencias gravadas
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        etUsuario.setText(settings.getString("PrefUsuario", ""));
    }
    
    /**Chamado quando a Activity é encerrada.*/
    @Override
    protected void onStop(){
       super.onStop();

       //Caso o checkbox esteja marcado gravamos o usuário
       CheckBox chkSalvar = (CheckBox)findViewById(R.id.chkSalvar);
       if (chkSalvar.isChecked()){
           SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
           SharedPreferences.Editor editor = settings.edit();
           editor.putString("PrefUsuario", etUsuario.getText().toString());
    
           //Confirma a gravação dos dados
           editor.commit();
       }
    }
    
    //Evento click do botão Fechar prorama
    public void btnFechar_Click(View v){
        finish(); // fecha aplicativo
    }
}


Abaixo segue uma imagem do nosso projeto.
Shared Preferences


Para o programa ter o efeito esperado é necessário digitar alguma coisa no campo "Usuário", marcar o checkbox "Salvar preferência" e emseguida clicar no botão "Fechar programa", depois disso é só executar novamente seu aplicativo.

Bem, por enquanto é isso pessoal, espero que tenham gostado e em breve trarei mais novidades para vocês, obrigado e até mais.

Desenvolvi o jogo Circus Puzzle Free ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.



Desenv com qualidade!

6 comentários:

Anônimo disse...

Seus tutoriais sao otimos...

estou com uma dúvida e se apos eu gravar eu resolvesse desmarcar o checkbox e salvar em branco esta informaçao para nao trazer mais ela preenchida como q ficaria?

abraços

Marcio de Souza disse...

Olá Amigo,

Para limpar o usuário nesse caso seria o seguinte:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("PrefUsuario", ""));

//Confirma a gravação dos dados
editor.commit();

Obrigado pela visita.

Backup disse...

Muito obrigado, funcionou certinho

abraços

Unknown disse...

Ótimo tutorial! Parabéns!
Pensei em fazer um quiz e ir salvando as respostas escolhidas num Shared Preferences e depois enviar tudo para um sqllite ou webservice, sabe se é possível?

Adelso_silva disse...
Este comentário foi removido pelo autor.
lucas disse...

Muito bom o tutorial.
Estava fazendo aqui e colocando uma tela de abertura com um botão para entrar nessa outra tela Shared Preferences, mas como tela secundaria ele não salva.
Alguem poderia me dizer pq não funicona?