ContentResolver.update方法ContentValue只更新指定的字段
如题目所叙,调用ContentResolver中更新方法
大致操作如下:
public boolean onUpdateItem(Object data, DBParseCallback cb) {
if(null != data && data instanceof INFO_MATCHCOLLECT){
INFO_MATCHCOLLECT matchData = (INFO_MATCHCOLLECT) data;
String userId = getUserId();
ContentValues values = new ContentValues();
if(matchData.wholeFieldBacktoSee){
values.put("wholeFieldBacktoSee", 1);
}else {
values.put("wholeFieldBacktoSee", 0);
}
try {
mContentResolver.update(mUri, values, "sid = ? and userId = ?", new String[] {matchData.sid, userId });
} catch (Exception e) {
return false;
}
}
return true;
}
一般会把改变的字段和值,以key-value的形式存到ContentValues中,调用update方法。
这时可能会考虑到,其他不需要改变的字段,是否也要把它们放进ContentValues中呢??




经过试验,证明,只需要把更改的字段放入,其他不变的不需要额外再放。
虽然,这个问题很简单,很细小,但是在网上查,却不好找到类似这样的回答。所以自己试验了一下,就很明了。实验可以检验真理,也可以让你明白一个知识点,更会让你很容易把它记住。

ContentResolver的query方法参数说明
第一个参数,uri
第二个参数,projection,这个参数告诉Provider要返回的内容(列Column),null 为所有行
第三个参数,selection,设置条件,相当于SQL语句中的where,例:"packageName = ?"
第四个参数,selectionArgs,这个参数是要配合第三个参数使用的。例:new String[]{packageName}
第五个参数,sortOrder,按照什么进行排序,相当于SQL语句中的Order by
注意:sortOrder参数可以按照指定的列升序或降序排列,这时可能会默认加上group by 所以参数里要带上group by 的参数,再加上order by ... 可以加上数量的限制 limit 9. 例:"packageName order by updateTimeStamp DESC limit 9"