我正在通过getContentResolver().update()
方法更新ListView中的项目,我想通过ContentValue增加'views'字段,但无法弄清楚这是否可行。
我可以使用原始SQL SET views = views + 1
执行此操作,但设置ContentValue(例如cv.put("views", "views + 1")
)会导致视图字段明确设置为“views + 1”而不是数字。
关于此的任何指示,或者我是否采用更手动的方法?
谢谢,
保
更新:
我现在回到使用原始SQL执行更新,然后通过getContentResolver().notifyChange()
手动通知基础CursorAdapter更改。如果我能通过getContentResolver().update()
找到直接做到这一点的方法,那仍然会很棒,所以如果有人有办法,请在此处发布。
答案 0 :(得分:7)
我对此的最终解决方案是通过Uri
使用自定义...item/5/updateviews
(ContentProvider
行),以便调用getContentResolver().update(customUri, ...)
传递此Uri
update()
1}}告诉我的ContentProvider的重写update()
方法增加此项的查看次数,从而避免需要通过ContentValues
参数将值传递给{{1}}。
答案 1 :(得分:0)
我在内容提供程序上实现了调用API,作为将原始/一次性SQL查询直接发送到底层SQLiteDatabase的方法。这很容易。
答案 2 :(得分:-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});
类似于使用ContentValues
的内容。
可能更简单的路线可能是:
database.execSQL("UPDATE my_table_name SET my_counter_field = my_counter_field + 1 WHERE my_where_field = ?", new Object[] {key});
或甚至可能使用触发器。请参阅此问题,看看它是否满足您的需求:Use trigger for auto-increment