我有更新的代码:
public Boolean update() {
try {
data.put(ContactsContract.Groups.SHOULD_SYNC, true);
ContentResolver cr = ctx.getContentResolver();
Uri uri = ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, Long.parseLong(getId()));
int mid = cr.update(uri, data,_ID+"="+getId(), null);
// notify registered observers that a row was updated
ctx.getContentResolver().notifyChange(
ContactsContract.Groups.CONTENT_URI, null);
if (-1 == mid)
return false;
return true;
} catch (Exception e) {
Log.v(TAG(), e.getMessage(), e);
return false;
}
}
我在data
中有值,我仔细检查过,并且由于某种原因,值被推出。我还运行了cur.requery();
而我正在
<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>
编辑1 有一点需要注意,我需要使用:
data.put(ContactsContract.Groups.SHOULD_SYNC, 1);
作为true
值不被接受,但是当您检查ContentValues时会返回。
答案 0 :(得分:1)
好的,我也把它弄清楚了:
SQLiteException: no such column: res_package: , while compiling: UPDATE groups SET sync4=?, sync3=?, sync2=?, group_visible=?, system_id=?, sync1=?, should_sync=?, deleted=?, account_name=?, version=?, title=?, title_res=?, _id=?, res_package=?, sourceid=?, dirty=?, notes=?, account_type=? WHERE _id=20
奇怪的是,查询内容提供程序时会返回此列。我让查询使用所有返回的列,所以我需要以某种方式完成这项工作。
答案 1 :(得分:1)
我刚做了类似的工作。而不是
int mid = cr.update(uri, data,_ID+"="+getId(), null);
使用
int mid = cr.update(uri, data,null, null)
您的uri已经嵌入了ID信息。