En este tutorial, utilizaremos preferencias compartidas en nuestra aplicación de Android para almacenar datos en forma de par clave-valor .
Descripción general de las preferencias compartidas de Android
Shared Preferences permite que las actividades y aplicaciones mantengan sus preferencias, en forma de pares clave-valor similares a un mapa que persistirá incluso cuando el usuario cierre la aplicación. Android almacena la configuración de Shared Preferences como un archivo XML en la carpeta shared_prefs , en el directorio DATA/data/{application package}. 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
- sobre borrar los datos de la aplicación (a través de Configuración)
Como sugiere el nombre, 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 obtener acceso a las preferencias, tenemos tres API para elegir:
- getPreferences() : se utiliza desde dentro de su Actividad, para acceder a las preferencias específicas de la actividad
- getSharedPreferences() : se utiliza 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 operativo. A continuación, se muestran los modos operativos aplicables:
- MODE_PRIVATE : el modo predeterminado, donde solo la aplicación que realiza la llamada puede acceder al archivo creado.
- MODE_WORLD_READABLE : Crear archivos legibles para todo el mundo es muy peligroso y es probable que cause agujeros de seguridad en las aplicaciones.
- MODE_WORLD_WRITEABLE : Crear archivos con permisos de escritura global es muy peligroso y puede causar agujeros de seguridad en las aplicaciones.
- MODE_MULTI_PROCESS : Este método verificará la modificación de las preferencias incluso si la instancia de preferencia compartida ya se ha cargado
- MODE_APPEND : Esto agregará las nuevas preferencias con las preferencias ya existentes.
- MODE_ENABLE_WRITE_AHEAD_LOGGING : Indicador de apertura de la base de datos. Cuando está configurado, habilitará el registro de escritura anticipada de manera predeterminada
Inicialización
Necesitamos un editor para editar y guardar los cambios en las preferencias compartidas. El siguiente código se puede utilizar para obtener las preferencias compartidas.
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private modeEditor 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/falseeditor.putString("key_name", "string value"); // Storing stringeditor.putInt("key_name", "int value"); // Storing integereditor.putFloat("key_name", "float value"); // Storing floateditor.putLong("key_name", "long value"); // Storing long editor.commit(); // commit changes
Recuperando datos
Se pueden recuperar datos de las preferencias guardadas llamando a getString() de la siguiente manera:
pref.getString("key_name", null); // getting Stringpref.getInt("key_name", -1); // getting Integerpref.getFloat("key_name", null); // getting Floatpref.getLong("key_name", null); // getting Longpref.getBoolean("key_name", null); // getting boolean
Borrar o eliminar datos
remove(“key_name”) se utiliza para eliminar ese valor en particular. clear() se utiliza para eliminar todos los datos .
editor.remove("name"); // will delete key nameeditor.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
El activity_main.xmldiseño consta de dos vistas EditText que almacenan y muestran el nombre y el correo electrónico. Los tres botones implementan sus respectivos onClicks en el 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 MainActivity.javaarchivo se utiliza para guardar y recuperar los datos a través de 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) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; }}
mypreference es el nombre del archivo donde se almacena el par clave-valor de las preferencias compartidas. La siguiente imagen muestra el resultado final de nuestro proyecto: Con esto finaliza este tutorial. Puedes descargar el proyecto Android Shared Preferences desde el siguiente enlace.
Descargar Proyecto de ejemplo de preferencias compartidas de Android