我正在编写一个备份和恢复联系人数据的程序。我在恢复数据时遇到问题,我想在从服务器恢复数据之前从表中删除数据,但我无法通过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;
}
答案 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();
}