Índice
En esta última parte de una serie de 4 artículos en los que se ha ido explicando cómo implementar un ContentProvider desde cero, se va a ver cómo registrar dicho proveedor y cómo darle uso.
Registrar el proveedor
Para poder usar el proveedor es necesario registrarlo en el AndroidManifest:
<provider android:name=".SitesProvider"
android:authorities="com.elbauldelprogramador.provider.FavSites" />
Añadir registros
String tag = "Insertando registros...";
ContentValues cv = new ContentValues();
Log.d(tag,"Adding a site...");
cv.put(FavSitesProviderMetaData.favSitesTableMEtaData.NAME,
"NombreSitio");
cv.put(FavSitesProviderMetaData.favSitesTableMEtaData.DESCRIPCION,
"Descripcion");
cv.put(FavSitesProviderMetaData.favSitesTableMEtaData.LONGITUD,
paquete.getInt("long"));
cv.put(FavSitesProviderMetaData.favSitesTableMEtaData.LATITUD,
paquete.getInt("lat"));
ContentResolver cr = getContentResolver();
Uri uri = FavSitesProviderMetaData.favSitesTableMEtaData.CONTENT_URI;
Log.d(tag,"site insert uri:" + uri);
Uri insertedUri = cr.insert(uri, cv);
Log.d(tag,"inserted uri:" + insertedUri);
Eliminar registros
ContentResolver cr = getContentResolver();
Uri uri = FavSitesProviderMetaData.favSitesTableMEtaData.CONTENT_URI;
Log.d("Deleting site...","site delete uri:" + uri);
cr.delete(uri,
"_ID=?",
new String[]{"5"});
Obtener el número de registros
Para realizar esto, debemos crear un cursor y contar el número de registros de este:
Uri uri = FavSitesProviderMetaData.favSitesTableMEtaData.CONTENT_URI;
Cursor cur = managedQuery(uri,
null, // projection
null, // selection strings
null, // selection args array of strings
null);// sort order
int numeroRegistros = cur.getCount();
cur.close();
Mostrar la lista de sítios
Muestra todo el contenido de la tabla sites de la base de datos.
/**
* Función que imprime los resultados por el Log.
*/
public void logOutput(Context context){
//Salida por LOG.
String tag = "Retrieve list of sites.";
Uri uri = FavSitesProviderMetaData.favSitesTableMEtaData.CONTENT_URI;
Activity a = (Activity) context;
Cursor c = a.managedQuery(uri
,null //projection
,null //selection string
,null //selection args array of string
,null); //sort order
int iname = c.getColumnIndex(
FavSitesProviderMetaData.favSitesTableMEtaData.NAME);
int iDesc = c.getColumnIndex(
FavSitesProviderMetaData.favSitesTableMEtaData.DESCRIPCION);
int iLat = c.getColumnIndex(
FavSitesProviderMetaData.favSitesTableMEtaData.LATITUD);
int iLong = c.getColumnIndex(
FavSitesProviderMetaData.favSitesTableMEtaData.LONGITUD);
int iFoto = c.getColumnIndex(
FavSitesProviderMetaData.favSitesTableMEtaData.FOTO);
//Informamos de los índices
Log.d(tag, "name, description, latitude, long, photo: "
+ iname + iDesc + iLat + iLong + iFoto);
//Recorremos las filas basándonos en índices
for(c.moveToFirst(); !c.isAfterLast();c.moveToNext()){
//Recoger los valores
String id = c.getString(0);
String name = c.getString(iname);
String desc = c.getString(iDesc);
String lat = c.getString(iLat);
String lon = c.getString(iLong);
String foto = c.getString(iFoto);
//informar
StringBuffer cbuf = new StringBuffer(id);
cbuf.append(",").append(name);
cbuf.append(",").append(desc);
cbuf.append(",").append(lat);
cbuf.append(",").append(lon);
cbuf.append(",").append(foto);
Log.d(tag, cbuf.toString());
}
//Numero de registros
int numberOfRecords = c.getCount();
Log.d(tag, "Num of records: " + numberOfRecords);
//cerrar el cursor
c.close();
}
Espero que este conjunto de cuatro artículos os haya servido de ayuda. En los próximos artículos veremos en profundidad los intents.
Siguiente Tema: Intents - Conceptos básicos
¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.
Quizá también te interese leer...
- Programación Android: Implementando un Content Provider (Parte 1)
- Programación Android: Implementando un Content Provider (Parte 2)
- Programación Android: Implementando un Content Provider (Parte 3)
- 10 errores de novato que todo desarrollador Android debería evitar
- Disponible la primera parte del curso Android en PDF