1

我有此代码可以删除联系人组

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,但没有执行删除,在活动重启时我仍然看到列表中的记录。我做错了什么?

4

3 回答 3

2

您不需要添加 where 子句。如果您不想立即删除数据库中的项目并且不将它们标记为已删除,请将此行添加到您的 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 将立即删除行。

希望这有帮助。

于 2014-01-27T09:15:33.077 回答
1

这是我的错过:

在查询现有记录时,我必须添加一个 where 子句来表示我不想要deleted=1值,因为这些值不会立即删除,它们被标记为已删除。

Cursor managedCursor = act.managedQuery(contacts, projection, 
                ContactsContract.Groups.DELETED + "=0", 
                null,
                ContactsContract.Groups.TITLE + " ASC");
        return managedCursor;
于 2010-03-01T06:59:39.003 回答
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);
        }
于 2014-02-22T06:21:09.333 回答