Bienvenidos sean a este post, hoy concluiremos con ContentProvider y para ello vamos a utilizar otra aplicacion, en este caso usaremos a Asteroides pero antes debemos instalar la aplicacion creada en los posts anteriores, PuntuacionesProvider, para instalarla es simplemente compilarla y probarla en el emulador o dispositivo que vamos a utilizar, si todo esta correcto una vez instalada nos debera aparecer una app con un texto simple como se ve en la siguiente imagen

Anuncios

Con esto podemos considerar que la aplicaicon PuntuacionesProvider esta instalada.

Nota: No es necesario que la misma este siendo ejecutada, solamente alcanza con que se encuentre en el dispositivo donde probaremos a Asteroides.

Una vez instalada debemos abrir Asteroides con Android Studio, cuando estemos dentro crearemos una nueva clase Java llamada AlmacenPuntuacionesProvider y modificaremos el codigo generado por el siguiente:

Anuncios
package com.tinchicus.asteroides;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;
import android.widget.Toast;

import java.util.Vector;

public class AlmacenPuntuacionesProvider implements AlmacenPuntuaciones {

    private Activity actividad;

    public AlmacenPuntuacionesProvider(Activity actividad){
        this.actividad=actividad;
    }

    public void guardarPuntuacion(int puntos, String nombre, long fecha){
        Uri uri = Uri.parse(
                "content://org.example.puntuacionesprovider/puntuaciones");
        ContentValues valores=new ContentValues();
        valores.put("nombre",nombre);
        valores.put("puntos",puntos);
        valores.put("fecha",fecha);

        try{
            actividad.getContentResolver().insert(uri,valores);
        }
        catch (Exception e){
            Toast.makeText(actividad,"Verificar que esta instalado "
                    +"org.example.puntuacionesprovider", Toast.LENGTH_SHORT)
                    .show();
            Log.e("Asteroides","Error: " + e.toString(),e);
        }
    }

    public Vector<String> listaPuntuaciones(int cantidad){
        Vector<String> resultado = new Vector<String>();
        Uri uri = Uri.parse(
                "content://org.example.puntuacionesprovider/puntuaciones");
        Cursor cursor = actividad.getContentResolver().query(uri,null,
                null,null,"puntos DESC");
        if(cursor!=null){
            while(cursor.moveToNext()){
                String nombre = cursor.getString(cursor.getColumnIndex("nombre"));
                int puntos = cursor.getInt(cursor.getColumnIndex("puntos"));
                resultado.add(puntos + " " + nombre);
            }
        }
        return resultado;
    }
}

Primero crearemos un objeto llamado actividad de tipo Activity, despues crearemos un constructor para nuestra clase, la cual se encargara de recibir la actividad invocadora y la asignara al objeto actividad de esta clase, nuestro siguiente paso sera definir los dos metodos de la interfaz AlmacenPuntuaciones para poder utilizarla, nuestro primer metodo sera guardarPuntuacion() donde le enviaremos tres datos: nombre, puntos y fecha, en nuestra primer linea crearemos un objeto de tipo Uri donde por medio de un parse estableceremos la ubicacion de nuestro ContentProvider, despues crearemos un objeto llamado valores del tipo ContentValues, luego por medio de put() le agregaremos los valores informados, observen como primero enviamos el nombre de referencia y luego el valor informado, una vez cargados usaremos un try / catch para subir la informacion a traves de actividad con los datos en uri y valores, en caso de error mostraremos un mensaje de tipo Toast con la descripcion de la falla.

Anuncios
Nota: Para evitar este error es fundamental instalar la app PuntuacionesProvider.

El siguiente metodo, listarPuntuaciones(), en este caso como siempre usaremos un tipo Vector y le informaremos la cantidad a mostrar, al igual que el caso anterior estableceremos por medio de uri la ubicacion de nuestro ContentProvider, para luego crear un cursor donde ejecutaremos un query() con la informacion de uri y por ultimo le decimos que lo ordene por puntos de forma descendente, por medio de un condicional if chequeamos si cursor es distinto de null, en caso de ser verdadero hara un bucle while donde buscara cada uno de los elementos dentro de cursor, tendremos dos objetos de tipo String llamados nombre y puntos donde almacenaremos los datos de las columnas contenidas en cursor, una vez asignadas las almacenaremos a resultado, una vez terminado el bucle devolveremos el valor almacenado en resultado.

Antes de probar nuestra aplicacion debemos hacer una ultima modificacion en MainActivity, debemos modificar a la variable almacen de la siguiente forma:

almacen = new AlmacenPuntuacionesProvider(this);

Con esta modificacion realizada podemos probar nuestra aplicacion, una vez ejecutada en nuestro emulador, si pulsamos Puntuaciones obtendremos una imagen similar a esta

Anuncios

Les recomiendo jugar un poco y anotar las puntuaciones para obtener una imagen similar a esta

Como pueden ver los datos se almacenaron de forma correcta y pudimos volverlos a obtener, busquen por medio del Device File Explorer como se genero la base de datos en nuestro ContentProvider.

Anuncios

En resumen, hoy hemos terminado, realmente, con nuestro ContentProvider, hemos visto como se puede implementar en otra aplicacion, como almacena informacion, como recuperar la informacion y como a su vez esta podria ser utilizada por otra aplicacion, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00