2011-03-28 9 views
10

Estoy actualizando un elemento en un ListView mediante el método getContentResolver().update(), y me gustaría incrementar el campo 'views' a través de un ContentValue, pero no puedo entender si esto es posible .Android: Incremente el campo DB mediante ContentValues ​​

Podría hacer esto con raw SQL SET views = views + 1, pero al configurar un ContentValue, como cv.put("views", "views + 1"), los resultados en el campo de vistas se establecen explícitamente en "vistas + 1" en lugar de un número.

¿Alguna sugerencia sobre esto, o me queda un enfoque más manual?

Gracias,

Paul

ACTUALIZACIÓN:

he vuelto a usar SQL prima para realizar la actualización por ahora, y luego notificar manualmente el CursorAdapter subyacente del cambio a través de getContentResolver().notifyChange(). Sería genial si pudiera encontrar una forma de hacerlo directamente a través del getContentResolver().update(), así que si alguien tiene una manera de hacerlo, por favor publíquelo aquí.

Respuesta

7

Mi solución final a esta era utilizar una costumbre Uri (en la línea de ...item/5/updateviews) a través de la ContentProvider tal que una llamada a getContentResolver().update(customUri, ...) pasar esta Uri dice mi ContentProvider de anulado update() método para incrementar el conteo de vistas para este artículo, evitando así la necesidad de pasar valores a update() a través de su parámetro ContentValues.

-1
String key = "1";//some value where you want to update 
int currentCount = 5;//the existing value of the count field 

ContentValues values = new ContentValues(); 
values.put("my_counter_field", currentCount + 1); 
int updatedRows = database.update("my_table_name", values, "my_where_field = ?", new String[] {key}); 

algo así como para usar ContentValues.

posiblemente una ruta más simple puede ser: database.execSQL("UPDATE my_table_name SET my_counter_field = my_counter_field + 1 WHERE my_where_field = ?", new Object[] {key});

o tal vez incluso el uso de un disparador. Ver esta cuestión para ver si se adapte a sus necesidades: Use trigger for auto-increment

+0

¿Cómo sabría el valor de currentCount ... no es ese el punto de dejar que el comando de actualización de SQL maneje el incremento? –

+0

tendrías que obtenerlo de antemano :( – binnyb

+0

Ah ... bueno, eso no está aumentando, lamentablemente. Los activadores no funcionarán, ya que el incremento está relacionado con una acción de UI del usuario, no un cambio en la tabla. Gracias de todos modos. –

0

Implementé la API de llamada en mi proveedor de contenido como una forma de enviar consultas SQL sin procesar/únicas directamente a la SQLiteDatabase subyacente. Fue bastante fácil.

Cuestiones relacionadas