Ejemplo de Tutorial de Preferencias Compartidas de Android

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