8. Persistência de Dados
8.3. Salvando valor de porcentagem
Neste capítulo, vamos aprender a utilizar o SharedPreferences para salvar a configuração da taxa no aplicativo MiniCalculadora. Quando o usuário fechar o aplicativo, o valor será salvo, e ao reabrir o app, a última configuração será carregada automaticamente. Isso é útil para garantir que as preferências do usuário sejam preservadas, proporcionando uma experiência mais fluida.
Para realizar esse comportamento, vamos operar em dois métodos do ciclo de vida do Android: onStart() e onPause().
Ciclo de Vida do Android: onStart() e onPause()
- onStart(): Esse método é chamado logo após a criação da atividade (ou após ela voltar ao foco), antes que o usuário comece a interagir com a interface. É o local ideal para recuperar dados salvos previamente. No nosso caso, utilizaremos o onStart() para carregar a taxa salva em SharedPreferences e configurar a interface da calculadora com esse valor.
- onPause(): Esse método é chamado quando a atividade está prestes a perder o foco (por exemplo, ao abrir outra atividade ou ao minimizar o aplicativo). É o local ideal para salvar dados, pois você garante que as informações atuais sejam preservadas antes de o app sair do foco. Vamos usá-lo para armazenar o valor da taxa configurado pelo usuário em SharedPreferences.
Método onStart
O melhor momento para ler os dados persistidos, como os salvos em SharedPreferences, é no método onStart(). Isso ocorre porque o onStart() é chamado toda vez que a atividade se torna visível para o usuário, seja após a criação inicial da atividade ou quando ela retorna ao foco depois de ser temporariamente interrompida.
Isso garante que os dados atualizados sejam carregados antes de o usuário interagir com a interface, tornando a experiência de uso mais fluida e consistente. Se você utilizar onCreate() para isso, os dados serão carregados apenas na criação inicial da atividade. No entanto, ao usar onStart(), você garante que, sempre que o usuário voltar ao aplicativo, ele verá os dados mais atualizados.
A implementação deste método acessa o arquivo de preferências compartilhadas padrão do aplicativo para ler um dado do tipo Long. O dado salvo é um valor Double que foi convertido em bits, e utilizamos o método fromBits para realizar a conversão de volta ao seu valor original. Além disso, atualizamos o componente percentTextView para exibir o valor no formato de porcentagem e ajustamos a propriedade progress do percentSeekBar para refletir as alterações realizadas.
override fun onStart() {
super.onStart()
val sharedPref = getPreferences(Context.MODE_PRIVATE)
val defaultValue = 0.15
val savedTip = sharedPref.getLong(getString(R.string.tip_percentage), defaultValue.toBits())
percent = Double.fromBits(savedTip)
//atualiza UI
percentTextView?.text = percentFormat.format(percent)
percentSeekBar?.progress = (percent*100).toInt()
}
Método onPause
O método onPause() é o mais indicado para persistência de dados em muitos casos, porque ele é chamado quando a atividade está prestes a sair do foco, seja temporariamente (como ao abrir outra atividade) ou de forma mais permanente (como ao fechar o app). Ao salvar os dados em onPause(), você garante que as preferências do usuário serão persistidas antes que o aplicativo seja interrompido.
A implementação do método irá acessar o arquivo de preferências compartilhadas padrão do aplicativo e salvar um dado do tipo Long. O dado salvo é o valor da variável double que foi convertido em bits.
override fun onPause() {
super.onPause()
val sharedPref = getPreferences(Context.MODE_PRIVATE)
with (sharedPref.edit()) {
putLong(getString(R.string.tip_percentage), percent.toBits())
apply()
}
}