0

我正在使用一个应用程序,用户可以在该应用程序中从电话联系人中选择联系人并向他们发送消息。我正在为这样的电话联系人获取光标`

Cursor cursor =getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);

我在 cursoradapter 中使用这个光标在 listview 中显示它,并且我有一个数据库来存储用户选择的联系人。现在我只想显示 listview 中不在我的数据库中的联系人,我的意思是我想要类似的select name,phonenumber from contact except select name,phonenumber from mydatabase东西在我将在 cursoradapter 中使用的游标中得到这个结果。这可能吗?我该怎么做,请帮帮我。提前谢谢!.

4

3 回答 3

0

由于联系人和您的数据库不在同一个数据库中,因此您不能将他们的数据直接组合到同一个查询中。一些解决方法:

  1. 从代码中的联系人结果集中过滤不需要的行。例如,如果名称和编号与您的数据库匹配,只需将光标移动到下一行。

  2. 首先从您的数据库中构建一个排除列表并将其与联系人数据库查询一起使用,例如

    select name || ':magicseparator:' || number from mydatabase;
    

    where:magicseparator:只是一些随机字符串来帮助区分名称和数字并防止名称-数字冲突。

    然后从这些结果中构造一个逗号分隔的字符串列表,然后将其传递给联系人查询中的选择 (WHERE) 标准:

     "name || ':magicseparator:' || number not in (" + yourCommaSeparatedExclusionList + ")"
    
于 2013-09-03T08:29:22.067 回答
0

如果要删除任何特定联系人,则必须使用以下查询

  Cursor cr = getContentResolver().delete(url, where, selectionArgs);

或者如果想删除所有联系人

 ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
        null, null, null, null);
while (cur.moveToNext()) {
    try{
        String lookupKey = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
        Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
        System.out.println("The uri is " + uri.toString());
        cr.delete(uri, null, null);
    }
    catch(Exception e)
    {
        System.out.println(e.getStackTrace());
    }
}

我希望这能帮到您。

于 2013-09-03T08:05:17.093 回答
0

第 4 个参数是你的“WHERE”部分,所以你可以在那里添加它。

http://developer.android.com/reference/android/content/ContentResolver.html#query(android.net.Uri , java.lang.String[], java.lang.String, java.lang.String[], java.lang.String)

如果这不起作用,您总是可以遍历结果并以编程方式将其过滤掉。

于 2013-09-03T07:57:23.433 回答