Salvar dados simples com SharedPreferences

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 qualquer Context no app.
  • getPreferences(): use esse método em uma Activity 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);