viernes, 20 de mayo de 2016

[ANDRIOID] Guardar un valor por medio de SharedPreferences

Andrid tiene varias maneras de almacenar o utilizar información para sus aplicaciones, en el caso del almacenamiento dentro del mismo dispositivo tiene tres opciones interesantes que sea podrían adaptar a los requerimientos de los proyectos que se quieran, sin ambargo, debemos tener presente que sigue siendo un telefono o un movil con capacidades limitadas por lo que no son exactamente buenos para que funcionen como repositorios de información, ademas que recurdemos que android tiene una visión de siempre conectado por lo que tampoco es algo que le tomaran tanta importancia a futuro. 

A mi, en lo particular puedo considerar tres formas basicas para almacenar información de manera local que son las preferencias compartidas (archivos de XML), archivos y un el funcional SQLite que aunque muy limitado podemos usar funciones de base de datos. 

En este caso el post es sobre las preferencias compartidas que son contraladas mediante una clase llamada "SharedPreferences".  Estas preferencias estan construidas para trabajar con datos muy basicos, por lo que consiste en formar un mapa de valores con relación "nombre - valor". Creo que es una de las clases mas sencillas de usar, esto ayuda a guardar configuraciones del usuario o recordar algunos valores una vez que la aplicación fue reabierta o cargada, primero para poder usar las preferencias tendremos que crear la instancia de las clases.

        //Se inicializa el objeto de preferencias
        // Existen mas metodos que el MODE_PRIVATE pero estan
        //depreciados en el caso de MODE_WORLD_READABLE y
        // MODE_WORLD_WRITEABLE por tener problemas de seguridad
        SharedPreferences sp = getSharedPreferences("mispreferencias",MODE_PRIVATE);
        

Como se menciona SharedPreferences es una clase muy sencilla solo almacena valores de tipos básicos por lo que el guardar elementos consiste en crear un Objeto Editor de la clase y simplemente agregar (put) los valores con el formato "nombre - valor", por ejemplo si queremos almacenar un dato suponiendo una aplicación como la siguiente:



Por ejemplo queremos que cuando de click en el botón guardar quede almacenado el nombre que este en el EditText ponemos el siguiente codigo:


        // Se obtiene el valor
        String nuevoNombre = texto.getText().toString();
        // Se crea el objeto para controlar las preferencias
        SharedPreferences sp = getSharedPreferences("mispreferencias",MODE_PRIVATE);
        //Se genera un Editor para modificar
        SharedPreferences.Editor editor = sp.edit();
        //asignamos el valor al map
        editor.putString("nombre",nuevoNombre);
        // guardamos cambios
        editor.commit();


Para obtener los datos solo tenemos que traer los valores de la siguiente manera, cabe mencionar que si revisa el código y ve que el get lleva dos parámetros, son el primero es el nombre del valor que andamos buscando, en el caso del segundo valor, es solamente un valor por default que se utiliza en caso de que el nombre no este funcionando, esto según la aplicación lo hacemos al crear la actividad  lo asignamos al EditText


        //Se inicializa el objeto de preferencias
        // Existen mas metodos que el MODE_PRIVATE pero estan
        //depreciados en el caso de MODE_WORLD_READABLE y
        // MODE_WORLD_WRITEABLE por tener problemas de seguridad
        SharedPreferences sp = getSharedPreferences("mispreferencias",MODE_PRIVATE);
        String nombre = sp.getString("nombre","NO HAY GUARDADO");
        //mostramos el valor guardado o si es la primera vez
        // y no hay guardado simplemente pone el valor por default
        texto.setText(nombre);

SharedPreferences tiene también una actividad que puede ser usada para tener un panel de configuraciones que posteriormente publicare. 

Les dejo un ejemplo de una aplicación la cual utiliza el concepto de sharedPreferences para almacenar un valor. Lo dejo en Github.


No hay comentarios:

Publicar un comentario