2014-02-11 34 views
0

我正在寫一個備份和恢復聯繫人數據的程序。我在恢復數據時遇到問題,我想在從服務器恢復數據之前從表中刪除數據,但我無法通過ContentResolver實際刪除數據。如何從raw_contact和數據表中刪除數據?

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

getContentResolver()。delete只是將'deleted'列0設置爲1。 – user1434702

回答

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(); 
      }