Usando Shared Preferences en Android Studio

Usando Shared Preferences en Android Studio

Los shared preferences nos permiten guardar datos de nuestra aplicación y usarlo en diferentes a través de diferentes contextos como actividades, fragmentos entre otros.

Para comenzar creamos un proyecto nuevo y sólo usaremos dos actividades para probar el funcionamiento de las shared preferences y en que caso podemos usarlos.

El proyecto tendrá de nombre "AplicacionShared" teniendo un SDK Mínimo desde el API 21.

creando app shared preferences

Cuando se haya terminado de crear el proyecto agregaremos una clase llamada "Utilitarios" con el siguiente código.

En esta clase agregaremos dos métodos para poder facilitar el uso de la Clase Shared Preferences en nuestros proyectos, quedando de la siguiente manera:

clase utilitarios shared preferences

El primer método "setDefaultsPreference" tiene configurado el conjunto de código para realizar el guardado de datos a través de una clave y valor, además se solicita ingresar el contexto también.

Cada vez que quieras agregar un dato al objeto Shared Preferences sólo llamas al método y pasas los parámetros.

El segundo método "getDefaultsPreference" permite obtener algun dato de nuestro objeto Shared Preference indicando la clave y el contexto.

package com.peru.aplicacionshared;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

public class Utilitarios {

public static void setDefaultsPreference(String key, String value, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(key, value);
editor.commit();
}

public static String getDefaultsPreference(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}

}

Una vez configurado ya tenemos mucho más fácil realizar el uso de nuestro Shared Preference de tal forma el caso consistirá en guardar un dato en el objeto Shared Preference y usarlo en la segunda actividad.

Esta es la MainActivity por defecto donde reutilizaremos el codigo del FloatingActionButton(Fab) y colocaremos el código para asignar valores al objeto Shared Preference

shared preferences main activity

Agregamos la clase Utilitarios y el método "setDefaultsPreference" asigando valores al objeto Shared Preference

Utilitarios.setDefaultsPreference("usuario","gianmarco",view.getContext());
asignando valor shared preference

Ahora creamos una segunda actividad llamada "SecondActivity"

second activity shared preference

En esta actividad crearemos un TextView que mostrará el nombre del usuario.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity">

<TextView
android:id="@+id/tv_usuario"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="186dp"
android:layout_marginTop="350dp"
android:layout_marginEnd="168dp"
android:layout_marginBottom="362dp"
android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Ahora en la actividad usaremos la clase Utilitarios con el método para obtener el dato guardado en shared preference.

package com.peru.aplicacionshared;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {

TextView tv_usuario;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);

tv_usuario=(TextView)findViewById(R.id.tv_usuario);
tv_usuario.setText(Utilitarios.getDefaultsPreference("usuario",this));


}
}

De esta forma se obtiene el valor del dato almacenado con la clave usuario y se asigna el valor en el TextView usuario.

Ahora sólo nos falta agregar un botón en la primera actividad para que nos envie a la segunda actividad.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">


<Button
android:id="@+id/btn_actividad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="232dp"
android:layout_marginTop="392dp"
android:layout_marginEnd="86dp"
android:layout_marginBottom="291dp"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Quedando también nuestro primer activity con el siguiente codigo final.

package com.peru.aplicacionshared;

import android.content.Intent;
import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.view.View;

import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

Button btn_actividad;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

btn_actividad=(Button)findViewById(R.id.btn_actividad);
btn_actividad.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(v.getContext(),SecondActivity.class);
startActivity(i);
}
});



FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
*/
Utilitarios.setDefaultsPreference("usuario","gianmarco",view.getContext());
}

});
}

@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;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

Finalmente ejecutamos la aplicación para asegurar que funciona bien.

compilacion shared preference

Se ejecutó con normalidad ahora haremos click en el floating action button (fab) y por consiguiente en el botón para ingresar a la segunda actividad

resultado compilar shared preference

Y nos apareció el nombre de usuario asignado en el objeto Shared Preference. De esta forma se demuestra el funcionamiento de esta Clase y cómo podemos usarla para guardar datos y poder acceder a ellos a través de distintas actividades.

Publicar un comentario

Guardar mi nombre, correo electrónico y sitio web en este navegador la próxima vez que comente

2 Comentarios

  1. Thank you!!1

  2. Hola. ¿Ustedes tienen algún profesor share preferences en linea?. Estoy haciendo un proyecto en Android. Gracias.