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>

EDIT 1 言及すべきことの1つは、使用する必要があることです。

data.put(ContactsContract.Groups.SHOULD_SYNC, 1);

trueContentValues をチェックすると返されますが、そこの値は受け入れられません。

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 に答える