SharedPreferences no Android, Entendendo e Utilizando

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /SharedPreferences no Android, Entendendo e Utilizando

SharedPreferences no Android, Entendendo e Utilizando

Vinícius Thiengo
(16997) (13)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloManual de DevOps: como obter agilidade, confiabilidade e segurança em organizações tecnológicas
CategoriaEngenharia de Software
Autor(es)Gene Kim, Jez Humble, John Willis, Patrick Debois
EditoraAlta Books
Edição
Ano2018
Páginas464
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Tudo bem?

No vídeo acima é apresentado o que é e como utilizar a API SharedPreferences no Android.

Está que é uma API de armazenamento de dados bem simples e muito útil quando precisamos salvar, em persistência local, dados primitivos (long, intshort, char, double, floatboolean, String) que não sejam muito dinâmicos.

A API SharedPreferences é na verdade uma interface de trabalho, nativa do Android, para armazenamento de dados primitivos em um arquivo XML interno, arquivo de responsabilidade do aplicativo. A SharedPreferences API é a maneira mais simples de persistir em aplicativo pequenas quantidades de dados.

É isso mesmo: pequenas quantidades de dados, sendo todos primitivos (é, eu sei, String não é primitivo, mas é exceção aqui).

De qualquer forma, a SharedPreferences API é uma das principais APIs nativas do Android. Independente do seu nível como desenvolvedor Android, é importante que você a domine, pois certamente você precisará, em mais de um projeto, persistir dados simples para que determinados algoritmos de domínio funcionem como esperado.

Em meu livro Receitas Para Desenvolvedores Android, no capítulo um, tem um "algoritmo receita" para avaliação de aplicativo na Google Play Store, algoritmo que gira todo em torno da SharedPreferences API.

Para um armazenamento local mais robusto você pode seguramente utilizar a API SQLite, própria para isso: armazenamento local de grande quantidade de dados, podendo até mesmo armazenar objetos complexos.

Apesar de anteriormente eu ter mencionado que o banco de dados XML gerado, com o uso da SharedPreferences API, é de responsabilidade do aplicativo host, na verdade é possível sim o uso da mesma base de dados XML entre aplicações Android distintas que trabalham com a API SharedPreferences.

Porém essas aplicações têm de ter o mesmo User ID que o núcleo Linux (sistema Android) cria para cada aplicação, neste caso, para ter o mesmo User ID, o programador teria de fazer essa alteração na "unha", no AndroidManifest de alguma das aplicações, colocando o mesmo User ID da outra aplicação.

Quanto as constantes de modo de acesso, MODE_MULTI_PROCESS e MODE_PRIVATE. A constante MODE_PRIVATE é a constante padrão a ser utilizada, constante que indica que apenas aplicações de mesmo User ID podem acessar a base de dados XML criada no app host com o uso da SharedPreferences API.

A constante MODE_MULTI_PROCESS indica a possibilidade de acesso, ao banco de dados XML criado pela SharedPreferences API, em mais de um processo ao mesmo tempo.

É importante não confundir "processos diferentes" com "aplicações diferentes", pois, pelo menos em meus testes práticos, a aplicação que não é host da base de dados XML criada via SharedPreferences API, mesmo a base tendo sido criada com MODE_MULTI_PROCESS. Está aplicação cliente, para ter acesso à base XML, ainda deve ter o mesmo User ID da aplicação host da base.

Note que os métodos getPreferences() (de Activity) e getSharedPreferences() (de Context), apesar de terem um tipo de acesso diferente, podem sim acessar os mesmos arquivos XML criados via SharedPreferences API.

Antes de finalizar, vou deixar logo abaixo alguns links de outros conteúdos do Blog, acompanhados de vídeos, que lhe colocarão em dia com o que há de novo no mundo do desenvolvimento Android:

E caso você tenha o desejo de aprender a criar apps Android, ou evoluir nesta área, também com o conteúdo gratuito do Blog e canal, então não deixe de acessar a lista de estudos em: Estudando Android - Lista de Conteúdos do Blog.

Não esqueça de se inscrever 📫na lista de e-mails do Blog para receber os conteúdos Android em primeira mão.

Se inscreva também no canal do Blog no YouTube para acompanhar as últimas novidades disponibilizadas em vídeo.

Surgindo dúvidas ou dicas, pode enviar abaixo na área de comentários que logo eu lhe retorno.

Obs. : o link para download do projeto apresentado em vídeo se encontra logo abaixo no artigo, na seção "Download".

Abraço.

Eclipse IDE vs Android Studio IDE

Apesar de o conteúdo da vídeo aula acima estar utilizando o Eclipse IDE 😱, tudo que é apresentado, tanto a parte teórica quanto a parte prática, é ainda válido nos dias de hoje com o desenvolvimento Android utilizando o Android Studio 😁.

Ou seja, independente da linguagem oficial (Java, Kotlin, C ou C++), IDE ou framework que você esteja utilizando, o conteúdo acima é ainda muito útil.

AndroidX

Apesar do conteúdo sobre a API SharedPreferences ainda estar atual e ser um grande diferencial para qualquer nível de desenvolvedor Android.

Apesar disso eu também recomendo, assim que finalizado o projeto em sua própria instalação de IDE, que você o migre para o AndroidX.

Algo que pode ser feito com poucos cliques, como apresentado no tutorial a seguir: Migrar para o AndroidX.

Fontes

SharedPreferences - documentação oficial Android

OnSharedPreferenceChangeListener - documentação oficial Android

Opções de armazenamento

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Login do Facebook no Android com LoginButtonLogin do Facebook no Android com LoginButtonAndroid
Compartilhamento com Facebook SDK no AndroidCompartilhamento com Facebook SDK no AndroidAndroid
Compartilhamento com Facebook ShareDialog no AndroidCompartilhamento com Facebook ShareDialog no AndroidAndroid
ContentProvider no Android, Entendendo e UtilizandoContentProvider no Android, Entendendo e UtilizandoAndroid

Compartilhar

Comentários Facebook

Comentários Blog (13)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
Vinicius (1) (0)
19/12/2016
Fala Thiengo!

Onde eu encontro o arquivo do SharedPreferences no Android Studio? Já rodei ele todo e não encontrei..
Responder
Vinícius Thiengo (1) (0)
20/12/2016
Vinicius, tudo bem?

Abre seu projeto no Android Studio. Execute um emulador (ou um device real). Logo depois rode sua APP no emulador.

Então, no Android Studio, vá em: Tools / Android / Android Device Monitor.

Vai abrir uma nova janela, ao lado esquerdo clique no identificador emulador que está aberto.

Então, na janela direita, clique em: data / data / package.name.de.seu.projeto / shared_prefs

E assim terá acesso ao arquivo XML do SharedPreferences criado. Abraço.
Responder
Vinicius (1) (0)
20/12/2016
Obrigado, encontrei aqui. Tomei uma surra do Android Estúdio e do SharedPreference kkkk
Perdi um tempão para encontrar o erro..
Responder
Elias Martins Ferreira (1) (0)
19/05/2015
Bom dia Thiengo, tudo bem?
queria tirar uma dúvida, estou tentando salvar um valor como  se fosse uma sessão em website, pois preciso que esse valor não se apague ao navegar entre telas, entretanto ao fazer a navegação, mesmo salvando com sharedpreferences o valor se perde, tem como  eu fazer isso no android ?
se tiver uma dica eu te agradeço, abraços.
Responder
Vinícius Thiengo (1) (0)
19/05/2015
Fala Elias, td bem sim.
Verifique se vc consegui ao menos levar os dados de "id de sessão" até o momento de salvar no SharedPreferences, pois se sim, o código do Shared deve funcionar de forma independente do WebView, logo mudar de página não o afetaria. Outra coisa que pode estar acontecendo é a lógica que vc esta utilizando estar gravando um valor vazio quando muda de página, mesmo quando a sessão já estava gravada. Verifica isso ae e depois retorne se ainda não tiver rodado corretamente. Abraço
Responder
Elias Martins (1) (0)
20/05/2015
Bom dia Thiengo, no caso estou gravando assim
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putString("PrefUsuario", cod);
                    //Confirma a gravação dos dados
                    editor.commit();

e no log o valor está sendo salvo
mas para recuperar
estou fazendo dessa maneira:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        String preferenciaCod = settings.getString("PrefUsuario", "");
agora não sei o que poder ser que não salva o valor
Responder
Vinícius Thiengo (1) (0)
20/05/2015
Elias, confirme no LogCat se tem algum valor dentro da variavel "cod", se ela realmente não é NULL ou esta vazia. Abraço
Responder
Elias Matins (1) (0)
20/05/2015
A variável cod tem valor, está variavel, está na tela de login e quero recuperar este valor na outra activity
log cat:
tela Login preferenciaCod : 000512? cod vendedo
Responder
Elias Martins (1) (0)
20/05/2015
blz Thiengo,  no caso o valor está sendo passado
I/tela Login preferenciaCod cod: 000512? cod vendedor
esté valor está tela de login e vou enviar para a tela de historico
Responder
Vinícius Thiengo (1) (0)
21/05/2015
ELias, mt estranho esse comportamento do SharedPreferences, alguma coisa está passando... mas enfim, para enviar os dados para a outra Activity vc pode utilizar o Parcelable (http://www.thiengo.com.br/parcelable-no-android-entendendo-e-utilizando ) ou o EventBus (http://www.thiengo.com.br/eventbus-lib-comunicacao-entre-entidades-android ). Somente Intent não curto mt pois já tive problemas com o envio de Strings. Abraço
Responder
Elias Martins (1) (0)
21/05/2015
blz Thiengo, vou ver esses videos, abraços.
Responder
Danilo Araújo (1) (0)
03/04/2015
Olá Thiengo, obrigado pelo vídeo!

Você saber se o SharedPreferences pode ser mais rápido que o SQlite? Tanto o SharedPreferences ou o SQLite tem alguma alguma coisa de relacionado a dados ou cache das informações do aplicativo?
Grato.
Responder
Vinícius Thiengo (0) (0)
03/04/2015
Fala Danilo, blz?
Se não me engano não há um mais rápido, depende da quantidade de dados que vc irá trabalhar, se for precisar de guardar o valor de uma ou outra flag, o SharedPreferences tende a ser a melhor escolha, pois será mais simples. Porém se for envolver estrutura de dados a serem salvas (valores de objetos, listas, ...) o SQLite é a melhor opção. Provavelmente o SQLite com flags tb é mais rápido, porém deve ser um tempo ganho de execução irrelevante para a quantidade de objetos que serão criados e a complexidade do código que vc terá de implementar... mas ai tu testa para ver se um é visivelmente mais rápido que o outro trabalhando com os dados que sua APP precisar guardar local. Abraço
Responder