Una de las opciones de almacenamiento de datos más interesantes que Android ofrece a sus usuarios son las preferencias compartidas . Preferencias compartidas es la forma en que uno puede almacenar y recuperar pequeñas cantidades de datos primitivos como pares clave/valor en un archivo en el almacenamiento del dispositivo, como String, int, float, Boolean, que conforman sus preferencias en un archivo XML dentro de la aplicación. en el almacenamiento del dispositivo. Preferencias compartidasse puede considerar como un diccionario o un par clave/valor. Por ejemplo, puede tener una clave que sea «nombre de usuario» y, para el valor, puede almacenar el nombre de usuario del usuario. Y luego podría recuperar eso por su clave (aquí nombre de usuario). Puede tener una API de preferencia compartida simple que puede usar para almacenar preferencias y recuperarlas cuando sea necesario. La clase de preferencias compartidas proporciona API para leer, escribir y administrar estos datos. A continuación se proporciona un GIF de muestra para tener una idea de lo que vamos a hacer en este artículo. Tenga en cuenta que vamos a implementar este proyecto utilizando el lenguaje Java .
Las preferencias compartidas son adecuadas en diferentes situaciones. Por ejemplo, cuando es necesario guardar la configuración del usuario o almacenar datos que se pueden usar en diferentes actividades dentro de la aplicación. Como sabe, siempre se llamará a onPause() antes de que su actividad se coloque en segundo plano o se destruya. Por lo tanto, para que los datos se guarden de forma persistente, es preferible guardarlos en onPause(), que podría restaurarse en onCreate() de la actividad. Los datos almacenados mediante preferencias compartidas se mantienen privados dentro del alcance de la aplicación. Sin embargo, las preferencias compartidas son diferentes del estado de la instancia de esa actividad.
¿En qué se diferencian las preferencias compartidas del estado de la instancia guardada?
Preferencias compartidas |
Estado de la instancia guardada |
---|---|
Conservar los datos en las sesiones de los usuarios, incluso si la aplicación se elimina y se reinicia, o si se reinicia el dispositivo | Conserva los datos de estado en todas las instancias de actividad en la misma sesión de usuario. |
Datos que deben recordarse entre sesiones, como la configuración preferida del usuario o su puntaje de juego. | Datos que no deben recordarse entre sesiones, como la pestaña seleccionada actualmente o el estado actual de actividad. |
Un uso común es almacenar las preferencias del usuario. | Un uso común es recrear el estado después de rotar el dispositivo. |
¿Cómo crear preferencias compartidas?
Lo primero que debemos hacer es crear un archivo de preferencias compartidas por aplicación. Así que asígnele el nombre del paquete de su aplicación: único y fácil de asociar con la aplicación. Cuando desee obtener los valores, llame al método getSharedPreferences() . Las preferencias compartidas proporcionan modos de almacenamiento de datos (modo privado y modo público). Es por compatibilidad con versiones anteriores: use solo MODE_PRIVATE para estar seguro.
Java
// Storing data into SharedPreferences SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref",MODE_PRIVATE); // Creating an Editor object to edit(write to the file) SharedPreferences.Editor myEdit = sharedPreferences.edit(); // Storing the key and its value as the data fetched from edittext myEdit.putString("name", name.getText().toString()); myEdit.putInt("age", Integer.parseInt(age.getText().toString())); // Once the changes have been made, // we need to commit to apply those changes made, // otherwise, it will throw an error myEdit.commit();
Java
// Retrieving the value using its keys the file name // must be same in both saving and retrieving the data SharedPreferences sh = getSharedPreferences("MySharedPref", MODE_APPEND); // The value will be default as empty string because for // the very first time when the app is opened, there is nothing to show String s1 = sh.getString("name", ""); int a = sh.getInt("age", 0); // We can then use the data name.setText(s1); age.setText(String.valueOf(a));
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" tools:ignore="HardcodedText"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="32dp" android:text="Shared Preferences Demo" android:textColor="@android:color/black" android:textSize="24sp" /> <!--EditText to take the data from the user and save the data in SharedPreferences--> <EditText android:id="@+id/edit1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/textview" android:layout_marginStart="16dp" android:layout_marginTop="8dp" android:layout_marginEnd="16dp" android:hint="Enter your Name" android:padding="10dp" /> <!--EditText to take the data from the user and save the data in SharedPreferences--> <EditText android:id="@+id/edit2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/edit1" android:layout_marginStart="16dp" android:layout_marginTop="8dp" android:layout_marginEnd="16dp" android:hint="Enter your Age" android:padding="10dp" android:inputType="number" /> </RelativeLayout>
Java
import androidx.appcompat.app.AppCompatActivity; import android.content.SharedPreferences; import android.os.Bundle; import android.widget.EditText; public class MainActivity extends AppCompatActivity { private EditText name, age; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); name = findViewById(R.id.edit1); age = findViewById(R.id.edit2); } // Fetch the stored data in onResume() // Because this is what will be called // when the app opens again @Override protected void onResume() { super.onResume(); // Fetching the stored data // from the SharedPreference SharedPreferences sh = getSharedPreferences("MySharedPref", MODE_PRIVATE); String s1 = sh.getString("name", ""); int a = sh.getInt("age", 0); // Setting the fetched data // in the EditTexts name.setText(s1); age.setText(String.valueOf(a)); } // Store the data in the SharedPreference // in the onPause() method // When the user closes the application // onPause() will be called // and data will be stored @Override protected void onPause() { super.onPause(); // Creating a shared pref object // with a file name "MySharedPref" // in private mode SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref", MODE_PRIVATE); SharedPreferences.Editor myEdit = sharedPreferences.edit(); // write all the data entered by the user in SharedPreference and apply myEdit.putString("name", name.getText().toString()); myEdit.putInt("age", Integer.parseInt(age.getText().toString())); myEdit.apply(); } }
Publicación traducida automáticamente
Artículo escrito por Prateek_Aggarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA