我正在尝试删除类似+911111的通话记录,但它无法正常工作

时间:2014-01-17 09:15:27

标签: java android

我正在尝试删除调用日志,例如+911111,但它无效。以下代码正在处理11111类型编号,但它不适用于+911111这样的数字。它只删除11111型号。

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String number = "11111";
    String queryString="NUMBER="+number; 
        int del = this.getContentResolver().delete(CallLog.Calls.CONTENT_URI,queryString,null);

        if(del == 1)
          Log.d("Delete", "Delete Number" + queryString);
        else
          Log.d("Not Delete", "Not Delete" + queryString);
  }

3 个答案:

答案 0 :(得分:1)

只需在数字周围加上单引号。用以下代码替换queryString:

String queryString = "NUMBER LIKE '" + number + "'";

像:

String number = "+911111";
getContentResolver().delete(CallLog.Calls.CONTENT_URI,queryString,  
null)

答案 1 :(得分:0)

它不会删除像+911111这样的数字,因为你的queryString说“=”

尝试将其更改为

String queryString="NUMBER LIKE "+number;

希望这会对你有所帮助。

答案 2 :(得分:0)

在构建查询时,您应该使用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);
相关问题