如何从raw_contact和数据表中删除数据?

时间:2014-02-11 11:45:20

标签: android

我正在编写一个备份和恢复联系人数据的程序。我在恢复数据时遇到问题,我想在从服务器恢复数据之前从表中删除数据,但我无法通过ContentResolver真正删除数据。

try {
    JSONArray rawContacts = fillList(ContactsContract.RawContacts.CONTENT_URI);
    JSONArray datas = fillList(ContactsContract.Data.CONTENT_URI);
    //save json data to server
} catch (Exception e) {
    e.printStackTrace();
}

public JSONArray fillList(Uri uri) throws Exception {
    JSONArray arr = new JSONArray();
    Cursor c = cr.query(uri, null, null, null, null);
    if(c == null || c.getCount() == 0) {
        Log.d("contact", "cursor is empty");
    } else {
        String[] columns = c.getColumnNames();
        while(c.moveToNext()) {
            JSONObject obj = new JSONObject();
            for(String col : columns) {
                int index = c.getColumnIndex(col);
                obj.put(col, index);
            }
            arr.put(obj);
        }
        c.close();
    }
    return arr;
}

1 个答案:

答案 0 :(得分:0)

这个uri可以真正删除联系人。

            Uri uri = RawContacts.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build();

            ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
            ops.add(ContentProviderOperation.newDelete(uri)
                    .build());
            try {
                cr.applyBatch(ContactsContract.AUTHORITY, ops);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OperationApplicationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }