0

我有这段代码可以CallCallLog.Calls提供者中删除一个:

            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.2,但不适用于 android 2.3.3

LogCat 中没有错误。

4

2 回答 2

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

(没有尝试过,但应该进行小的更正)

于 2012-06-04T13:48:45.170 回答
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 ");
            }
        }
于 2012-11-20T11:57:48.913 回答