2012-06-04 65 views
0

我有這樣的代碼刪除CallCallLog.Calls提供商:在Android 2.2從callLog刪除 - 安卓2.3.3

  String strNumber= "myPhoneNumber" 

      String queryString= "NUMBER='" + strNumber + "'"; 

      Log.v("Number", queryString); 

      int i=context.getContentResolver().delete(CallLog.Calls.CONTENT_URI, queryString, null); 
      if(i<1) 

      { 
       // do my stuff 
      } 

此代碼的工作,但它在Android 2.3.3

一點兒也不工作

LogCat中沒有錯誤。

回答

1

在構建查詢時,您應該使用SDK提供的合同類(在您的情況下爲CallLog.Calls)。

契約類意圖將對象模型映射到數據庫中相應的數據名稱。當android團隊需要更新數據庫中的列名時,他們也會更新合同類,然後開發人員不需要進行更改。

然後試着改變你的查詢字符串:

String queryString = CallLog.Calls.NUMBER + "='" + strNumber + "'"; 

注:單引號是必要的。

還要確保該號碼與數據庫號碼完全一致。

(!33678541236 = 0678541236)

就一定要刪除正確的行,你可以做到以下幾點:

Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + " = ? ", strNumber , ""); 
int idOfRowToDelete = cursor.getInt(cursor.getColumnIndex(CallLog.Calls._ID)); 
getContentResolver().delete(Uri.withAppendedPath(CallLog.Calls.CONTENT_URI, String.valueOf(idOfRowToDelete)), "", null); 

(沒有嘗試,但應與工作小的更正)

+0

我的錯誤是myPhoneNumber沒有太多的'NUMBER'在數據庫中。就像你的例子一樣。謝謝您的幫助 ! – 113408

+0

沒問題,祝你的項目好運。 :) –

0
private void deleteNumber() { 
      try { 
       String strNumberOne[] = { "00577698160" }; 
       Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + " = ? ", strNumberOne, ""); 
       boolean bol = cursor.moveToFirst(); 
       if (bol) { 
        do { 
         int idOfRowToDelete = cursor.getInt(cursor.getColumnIndex(CallLog.Calls._ID)); 
         getContentResolver().delete(Uri.withAppendedPath(CallLog.Calls.CONTENT_URI, String.valueOf(idOfRowToDelete)), "", null); 
        } while (cursor.moveToNext()); 
       } 
      } catch (Exception ex) { 
       System.out.print("Exception here "); 
      } 
     }