Обновление не работает при использовании ContentResolver для обновления групп контактов - PullRequest
1 голос
/ 06 марта 2010

У меня есть этот код для обновления:

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.

Ответы [ 2 ]

1 голос
/ 25 сентября 2013

Я только что сделал что-то подобное. Вместо

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

использование

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

Ваш URI уже имеет встроенную идентификационную информацию.

1 голос
/ 04 апреля 2010

Хорошо, я тоже понял:

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

Странно то, что этот столбец возвращается, когда вы запрашиваете контент-провайдер. Я сделал запросы, чтобы использовать все возвращенные столбцы, поэтому мне нужно как-то заставить это работать.

...