Обновление не работает при использовании ContentResolver для обновления групп контактов
У меня есть этот код для обновления:
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 ответа
Хорошо, я тоже понял это:
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
Странно то, что этот столбец возвращается, когда вы запрашиваете контент-провайдера. Я сделал запросы, чтобы использовать все возвращенные столбцы, поэтому мне нужно как-то заставить это работать.
Я только что сделал что-то подобное. Вместо
int mid = cr.update(uri, data,_ID+"="+getId(), null);
использование
int mid = cr.update(uri, data,null, null)
Ваш URI уже имеет встроенную идентификационную информацию.