Проблема, связанная с удалением группы контактов на Android
У меня есть этот код для удаления группы контактов
public void delete(Activity act,String[] args) {
try {
int b=act.getContentResolver().delete(ContactsContract.Groups.CONTENT_URI,"_ID=?", args);
Toast.makeText(act, "Deleted",Toast.LENGTH_SHORT).show();
//notify registered observers that a row was updated
act.getContentResolver().notifyChange(ContactsContract.Groups.CONTENT_URI, null);
} catch (Exception e) {
Log.v(TAG, e.getMessage(), e);
Toast.makeText(act, TAG + " Delete Failed",Toast.LENGTH_LONG).show();
}
}
Я называю метод как
private void processDelete(long rowId) {
String[] args = { String.valueOf(rowId) };
objItem.delete(this, args);
cur.requery();
}
я имею
<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>
Идентификатор передан в порядке.
Значение b возвращает 1, но удаление не выполняется, при возобновлении активности я все еще вижу запись в списке. Что я делаю не так?
3 ответа
Это была моя мисс
При запросе существующих записей мне пришлось добавить предложение where, чтобы обозначить, что я не хочу deleted=1
Значения, поскольку значения не удаляются мгновенно, они помечаются как удаленные.
Cursor managedCursor = act.managedQuery(contacts, projection,
ContactsContract.Groups.DELETED + "=0",
null,
ContactsContract.Groups.TITLE + " ASC");
return managedCursor;
Вам не нужно добавлять пункт, где говорится, что. Если вы хотите мгновенно удалять элементы в базе данных и не помечать их как удаленные, добавьте эту строку в свой URI.
mUri.buildUpon().appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER,"1").build();
//and then call your delete function with URI appended like this.
mResolver.delete(mUri,null, null);
этот флаг: CALLER_IS_SYNCADAPTER, установленный в 1, немедленно удалит строку.
Надеюсь, это помогло.
Вы можете удалить группу контактов, используя эту
private void deletaAllInGroup(Context context, long groupId)
throws RemoteException, OperationApplicationException{
ContentValues values = new ContentValues();
values.put(ContactsContract.Groups._ID, groupId);
getContentResolver().delete(ContactsContract.Groups.CONTENT_URI,values.toString(),null);
}