Persistência de dados com SharedPreferences

Persistência de dados com SharedPreferences

janeiro 22, 2019 0 Por Gabriel

A API do Android oferece diferentes formas de armazenamento de dados. Como o SQLite, Internal Storage, External Storage e o Shared Preferences que iremos tratar hoje. Qual opção é mais apropriada ? Vai depender do tipo de informação que será salva!

Hoje vamos estudar em quais casos o SharedPreferences é uma boa opção para armazenamento, sua implementação na prática e alguns exemplos de contexto que ele se encaixa.

Quando usar o SharedPreferences ?

Splash screen

Imagine que você queira exibir um Splash Screen em um aplicativo seu e que essa tela é exibida toda vez que o usuário abre o app… Acredito que o usuário não gostaria muito. Como podemos proceder para que essa tela abra apenas uma única vez ? O SharedPreferences é utilizado onde não há necessidade da criação de uma estrutura complexa como o banco de dados, mas é necessário a persistência de determinado dado simples.

Usando o Shared Preferences

Abaixo está um exemplo de como usar o SharedPreferences

public class MeuApp extends AppCompatActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_meuapp);
         SharedPreferences pref =
           getSharedPreferences("preferences", MODE_PRIVATE);

No onCreate chamamos o método getSharedPreferences a atribuímos a ele 2 parâmetros:

O nome do preferences, que no caso definimos como “preferences”

O modo de acesso ( Por padrão MODE_PRIVATE que restringe o acesso a sua preferences apenas a sua aplicação )

Com o contains( ) podemos ver o conteúdo de nosso preferences e verificar se o nosso preferences já foi invocado anteriormente.

Para isso faremos uma verificação simples através de um if para exibir o SplashScreen.

Ficando assim…

public class MeuApp extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_meuapp);
        SharedPreferences pref =
          getSharedPreferences("preferences", MODE_PRIVATE);

        if (preferences.contains("ja_abriu_app")) {
            //Não exibir o SplashScreen e prosseguir com o app
	    ...
        } else {
            mostrarSplashScreen();
        }
    }

Porém se executarmos a aplicação agora ela não terá o resultado desejado pois não criamos nenhuma método responsável por avisar que o preferences já foi aberto.

Salvando informações no SharedPreferences

Assim que o nosso método mostrarSplashScreen( ) for chamado, precisamos armazenar em nosso preferences que nosso splash já foi utilizado, para que em uma nova verificação não exiba novamente.

Para isso criaremos o método adicionarPreferenceJaAbriu(SharedPreferences preferences) que recebe como parâmetro um preferences.

private void  
adicionarPreferenceJaAbriu (SharedPreferences preferences) {
      SharedPreferences.Editor editor = preferences.edit();
      editor.putBoolean("ja_abriu_app", true);
      editor.commit();
 }

Para adicionar invocaremos o método Edit e através do putBoolean setamos o nome do valor “ja_abriu_app” e o valor Boolean que ele recebe, nesse caso ele receberá true.

Bem simples né ?

Por fim basta apenas chamar o método
adicionarPreferenceJaAbriu ( ) logo após o método mostrarSplashScreen( );

public class MeuApp extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_meuapp);
        SharedPreferences pref =
          getSharedPreferences("preferences", MODE_PRIVATE);
        if (preferences.contains("ja_abriu_app")) {
            //Não exibir o SplashScreen
	    ...
        } else {
            mostrarSplashScreen()
            adicionarPreferenceJaAbriu(pref);
        }
    }
    private void mostrarSplashScreen() {
	...
    }
}
private void adicionarPreferenceJaAbriu(SharedPreferences preferences) {
     SharedPreferences.Editor editor = preferences.edit();
     editor.putBoolean("ja_abriu_app", true);
     editor.commit();
}

Conclusão:

O SharedPreferences é uma ótima opção para quem quer salvar algo simples sem precisar de uma estrutura complexa. Mas em contextos que exigem um banco de dados com mais atributos o correto é utilizar outras formas de armazenamento como o SQLite por exemplo.

Assim finalizamos o conteúdo. Caso você tenha alguma dica ou dúvida sobre o artigo, deixe logo abaixo nos comentários.

Se curtiu o conteúdo, não esqueça de compartilha-lo. E por fim, não deixe de nos acompanhar nas redes sociais

Instagram: @DevLemos

Grupo no Whatsapp: https://chat.whatsapp.com/KpgX68HShoc9PSuB2OyY0u

Abraços!

Fontes:

https://developer.android.com/reference/android/content/SharedPreferences

https://developer.android.com/training/data-storage/shared-preferences#java

https://developer.android.com/guide/topics/data/data-storage