1

我有这个更新代码:

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 时会返回该值。

4

2 回答 2

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

奇怪的是,当您查询内容提供者时,会返回此列。我进行查询以使用所有返回的列,所以我需要以某种方式完成这项工作。

于 2010-04-04T17:42:08.347 回答
1

我刚刚做了类似的工作。代替

int mid = cr.update(uri, data,_ID+"="+getId(), null);

采用

int mid = cr.update(uri, data,null, null)

您的 uri 已经嵌入了 ID 信息。

于 2013-09-25T05:26:01.813 回答