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);