Caso tenha um conjunto relativamente pequeno de chaves-valor para salvar,
você pode usar as APIs SharedPreferences
. Um objeto SharedPreferences
indica um arquivo que contém pares de chave-valor e fornece métodos simples para leitura
e gravação. Cada arquivo SharedPreferences
é gerenciado pelo framework e
pode ser particular ou compartilhado.
Esta página mostra como usar as APIs SharedPreferences
para armazenar
e acessar valores simples.
Processar preferências compartilhadas
É possível criar um novo arquivo de preferências compartilhadas ou acessar um existente chamando um dos seguintes métodos:
getSharedPreferences()
: use esse método se precisar de vários arquivos de preferências compartilhadas identificados por nome, que são especificados com o primeiro parâmetro. É possível chamá-lo em qualquerContext
no app.getPreferences()
: use esse método em umaActivity
se precisar usar apenas um arquivo de preferências compartilhadas para a atividade. Como ele recupera um arquivo padrão que pertence à atividade, não é necessário fornecer um nome.
Por exemplo, o código abaixo acessa o arquivo de preferências compartilhadas
identificado pela string de recurso R.string.preference_file_key
e abre o arquivo usando
o modo privado para que o arquivo fique acessível somente ao app:
Kotlin
val sharedPref = activity?.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE)
Java
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
Ao nomear os arquivos de preferências compartilhadas, use um nome que seja claramente identificado
para o app. Uma maneira fácil de fazer isso é usar o ID do aplicativo
como prefixo do nome do arquivo. Por exemplo:
"com.example.myapp.PREFERENCE_FILE_KEY"
Como alternativa, caso precise apenas de um arquivo de preferências compartilhadas para sua atividade, use o
método getPreferences()
:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Se a API SharedPreferences
for usada para salvar as configurações do app,
use getDefaultSharedPreferences()
a fim de acessar o arquivo de preferências compartilhadas padrão de todo
o app. Confira mais informações no
Guia para desenvolvedores sobre configurações.
Gravar em preferências compartilhadas
Para gravar em um arquivo de preferências compartilhadas, crie um SharedPreferences.Editor
,
chamando edit()
nas SharedPreferences
.
Transmita as chaves e os valores que você quer gravar com métodos como
putInt()
e putString()
. Em seguida, chame apply()
ou
commit()
para salvar as mudanças. Exemplos:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_high_score_key), newHighScore) apply() }
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score_key), newHighScore); editor.apply();
apply()
muda imediatamente o
objeto SharedPreferences
na memória, mas
grava as atualizações no disco de forma assíncrona. Como alternativa, você pode usar commit()
para gravar os dados dessa forma. Contudo, como commit()
é síncrono,
evite chamá-lo pela linha de execução principal, porque ele pode pausar a
renderização da interface.
Ler de preferências compartilhadas
Para extrair valores de um arquivo de preferências compartilhadas, chame métodos como
getInt()
e
getString()
, fornecendo a chave para o valor
que você quer extrair e, opcionalmente, um valor padrão para retorno, caso a chave não esteja
presente. Por
exemplo:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key) val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key); int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);