Jetpack DataStore-Goodbye SharedPreferences | Autor: santosh nisal | julio de 2021
En este artículo, aprenderemos sobre lo que se usa para almacenar datos localmente y una nueva solución de almacenamiento en Android Jetpack.
Cuando se introdujo JetPack, proporcionó muchas bibliotecas, lo que facilitó la escritura de código de Android, evitar el código repetitivo, aumentar la productividad, crear aplicaciones de alta calidad, etc.Ahora bien, esta vez nos trae otra gran biblioteca llamada DataStore
Según el blog oficial, está destinado a reemplazar SharedPreferences
La API tiene varias desventajas.
Almacenamiento de datos Jetpack isegundo Una solución de almacenamiento de datos que le permite almacenar pares clave-valor u objetos escritos mediante búferes de protocolo. DataStore utiliza corrutinas de Kotlin y Flow para almacenar datos de forma asincrónica, coherente y transaccional.
Si está utilizando actualmente SharedPreferences
Para almacenar datos, considere migrar a DataStore.
Preference DataStore y Proto DataStore
DataStore proporciona dos implementaciones diferentes: Preferences DataStore y Proto DataStore.
- Almacenamiento de datos de preferencia Utilice claves para almacenar y acceder a datos. Esta implementación no requiere patrones predefinidos ni proporciona seguridad de tipos.
- Almacenamiento de datos brutos Almacene los datos como una instancia de un tipo de datos personalizado. Esta implementación requiere que defina la arquitectura utilizando búferes de protocolo, pero proporciona seguridad de tipos.
Agregue las siguientes dependencias en el archivo build.gradle para usar el almacenamiento de datos Jetpack.
Utilice DataStore para almacenar pares clave-valor
Suponga que está creando una aplicación para estudiantes que almacena los nombres de los estudiantes ingresados por los usuarios. Luego, cuando el usuario vuelva a abrir la aplicación después de un período de tiempo, podrá ver el nombre ingresado la última vez, porque la aplicación almacenará el nombre ingresado la última vez en el DataStore.
Para ello crearemos una clase AppPreferences
Manejaremos todas las preferencias establecidas por el usuario.
- Esta
AppPreferences
La clase necesitaráContext
Objeto para crearDataStore
. - Utilice el delegado de propiedad creado por
preferencesDataStore
Crea una instanciaDatastore<Preferences>
Llámelo una vez en el nivel superior del archivo Kotlin y luego acceda a él a través de esta propiedad en el resto de la aplicación. - Necesita definir una clave para cada
string
El valor para ahorrar stringPreferencesKey () Función.También necesitas definir el nombre de la clave.name
alcance. - Podemos crear una función para guardar el nombre del alumno en
DataStore
. EstaDataStore
suministroedit()
El método de guardar el valor.Podemos pasar la clave y el valor aMutablePreferences
En el lambda final. precaución,edit()
La función es unasuspend
Función. - Ahora puede usar el siguiente comando para obtener las preferencias guardadas del almacén de datos
datastore.data
Devuelve unFlow<Preferences>
y con.map
Operador que podemos conseguirFlow<String>
Al pasar la clave correcta a las preferencias, este es el nombre de nuestro estudiante.
Ahora en su clase de actividad / fragmento o ViewModel, siempre que desee guardar los nombres de los estudiantes en
DataStore
, Solo necesita llamar a nuestra función de suspensión saveStudentName () desde la corrutina. En el proyecto de demostración, llamé a saveStudentName () haciendo clic en el botón.
Para obtener el nombre del estudiante guardado del evento DataStore
Podemos cambiar para conseguir Flow<String>
Y obsérvelo después de cambiar a LiveData .asLiveData()
.
Ahora, debido a que hemos revelado el nombre del estudiante como Flow
, Cada vez que se actualiza o edita el nombre de un estudiante en el almacén de datos, se enviará un valor y el último nombre ingresado se actualizará en consecuencia y se mostrará en la vista de texto del último nombre ingresado.