En este tutorial utilizaremos las Preferencias compartidas en nuestra aplicación de Android para almacenar datos en forma de pares clave-valor.
Vista general de las Preferencias compartidas de Android
Las Preferencias compartidas permiten a las actividades y aplicaciones mantener preferencias, en forma de pares clave-valor similares a un Mapa, que persistirán incluso cuando el usuario cierre la aplicación. Android almacena la configuración de las Preferencias compartidas como un archivo XML en la carpeta shared_prefs dentro del directorio DATA/data/{paquete de la aplicación}. La carpeta DATA se puede obtener llamando a Environment.getDataDirectory()
. SharedPreferences es específico de la aplicación, es decir, los datos se pierden al realizar una de las siguientes opciones:
- al desinstalar la aplicación
- al borrar los datos de la aplicación (a través de Configuración)
Como su nombre sugiere, el propósito principal es almacenar detalles de configuración especificados por el usuario, como configuraciones específicas del usuario, manteniendo al usuario conectado a la aplicación. Para acceder a las preferencias, tenemos tres API para elegir:
- getPreferences() : utilizado desde dentro de su Actividad, para acceder a las preferencias específicas de la actividad
- getSharedPreferences() : utilizado desde dentro de su Actividad (u otro Contexto de aplicación), para acceder a las preferencias a nivel de aplicación
- getDefaultSharedPreferences(): se utiliza en PreferenceManager para obtener las preferencias compartidas que funcionan en conjunto con el marco de preferencias general de Android
En este tutorial, utilizaremos getSharedPreferences()
. El método se define de la siguiente manera: getSharedPreferences(String PREFS_NAME, int mode)
PREFS_NAME es el nombre del archivo. mode es el modo de operación. A continuación se muestran los modos de operación aplicables:
- MODE_PRIVATE: el modo predeterminado, donde el archivo creado solo puede ser accedido por la aplicación que lo llama
- MODE_WORLD_READABLE: crear archivos legibles por el mundo es muy peligroso y probablemente causará vulnerabilidades de seguridad en las aplicaciones
- MODE_WORLD_WRITEABLE: crear archivos escribibles por el mundo es muy peligroso y probablemente causará vulnerabilidades de seguridad en las aplicaciones
- MODE_MULTI_PROCESS: este método verificará la modificación de las preferencias incluso si la instancia de Shared Preference ya ha sido cargada
- MODE_APPEND: esto agregará las nuevas preferencias a las preferencias ya existentes
- MODE_ENABLE_WRITE_AHEAD_LOGGING: indicador de apertura de la base de datos. Cuando está configurado, habilitaría el registro de escritura por adelantado de forma predeterminada
Inicialización
Necesitamos un editor para editar y guardar los cambios en las preferencias compartidas. El siguiente código se puede usar para obtener las preferencias compartidas.
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
Almacenamiento de Datos
editor.commit() se utiliza para guardar los cambios en las preferencias compartidas.
editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long
editor.commit(); // commit changes
Recuperación de Datos
Los datos se pueden recuperar de las preferencias guardadas llamando a getString() de la siguiente manera:
pref.getString("key_name", null); // getting String
pref.getInt("key_name", -1); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean
Borrado o Eliminación de Datos
remove(“nombre_clave”) se utiliza para eliminar ese valor en particular. clear() se utiliza para eliminar todos los datos.
editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
editor.commit(); // commit changes
editor.clear();
editor.commit(); // commit changes
Estructura del Proyecto
Código del Proyecto de Preferencias Compartidas de Android
La disposición de activity_main.xml
consta de dos vistas EditText que almacenan y muestran el nombre y el correo electrónico. Los tres botones implementan sus respectivos onClicks en la clase MainActivity
.
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:onClick="Save"
android:text="Save" />
<Button
android:id="@+id/btnRetr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:onClick="Get"
android:text="Retrieve" />
<Button
android:id="@+id/btnClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/etEmail"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:onClick="clear"
android:text="Clear" />
<EditText
android:id="@+id/etEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Email"
android:inputType="textEmailAddress"
android:layout_below="@+id/etName"
android:layout_marginTop="20dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<EditText
android:id="@+id/etName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Name"
android:inputType="text"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/etEmail"
android:layout_alignStart="@+id/etEmail" />
</RelativeLayout>
El archivo MainActivity.java
se utiliza para guardar y recuperar datos mediante claves.
package com.journaldev.sharedpreferences;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
SharedPreferences sharedpreferences;
TextView name;
TextView email;
public static final String mypreference = "mypref";
public static final String Name = "nameKey";
public static final String Email = "emailKey";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
if (sharedpreferences.contains(Name)) {
name.setText(sharedpreferences.getString(Name, ""));
}
if (sharedpreferences.contains(Email)) {
email.setText(sharedpreferences.getString(Email, ""));
}
}
public void Save(View view) {
String n = name.getText().toString();
String e = email.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Name, n);
editor.putString(Email, e);
editor.commit();
}
public void clear(View view) {
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
name.setText("");
email.setText("");
}
public void Get(View view) {
name = (TextView) findViewById(R.id.etName);
email = (TextView) findViewById(R.id.etEmail);
sharedpreferences = getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
if (sharedpreferences.contains(Name)) {
name.setText(sharedpreferences.getString(Name, ""));
}
if (sharedpreferences.contains(Email)) {
email.setText(sharedpreferences.getString(Email, ""));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflar el menú; esto agrega elementos a la barra de acciones si está presente.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}
mypreference es el nombre del archivo donde se almacena el par clave-valor de preferencias compartidas. La imagen a continuación muestra la salida final de nuestro proyecto: Esto concluye este tutorial. Puedes descargar el proyecto Android Shared Preferences desde el siguiente enlace.
Descargar Proyecto de Ejemplo de Preferencias Compartidas de Android
Source:
https://www.digitalocean.com/community/tutorials/android-shared-preferences-example-tutorial