Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从联系人表中删除特定行_Android_Sqlite - Fatal编程技术网

Android 从联系人表中删除特定行

Android 从联系人表中删除特定行,android,sqlite,Android,Sqlite,我正在使用一个应用程序,在这个应用程序中,用户可以从电话联系人中选择联系人并向他们发送消息` Cursor cursor =getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 我在cursoradapter中使用此光标在listview中显示它, 我有一个存储用户选择的联系人的数据库。现在我只想在listview中显示不在我的数据库中的联系人,

我正在使用一个应用程序,在这个应用程序中,用户可以从电话联系人中选择联系人并向他们发送消息`

Cursor cursor =getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
我在cursoradapter中使用此光标在listview中显示它,
我有一个存储用户选择的联系人的数据库。现在我只想在listview中显示不在我的数据库中的联系人,我的意思是我想从联系人中选择姓名、电话号码,除了从我的数据库中选择姓名、电话号码,然后在光标中得到这个结果,我将在cursoradapter中使用。这可能吗?我该怎么做,请帮帮我。提前谢谢

第四个参数是您的“WHERE”部分,因此您可以将其添加到那里

,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String)


如果这不起作用,您总是可以循环遍历结果并通过编程进行过滤

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

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

我希望这将对您有所帮助。

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

  • 从代码中的联系人结果集中筛选不需要的行。例如,如果名称和数字与数据库匹配,只需将光标移动到下一行即可

  • 首先从数据库中构造排除列表,并将其与contacts数据库查询一起使用,例如

    select name || ':magicseparator:' || number from mydatabase;
    
    其中
    :magicsepator:
    只是一些随机字符串,用于帮助分隔名称和数字,并防止名称和数字冲突

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

     "name || ':magicseparator:' || number not in (" + yourCommaSeparatedExclusionList + ")"
    

  • 查看一些优秀的初学者教程,包括在Android中管理和查询您自己的数据库。感谢您的回复,我想我的问题不清楚,但我不想删除联系人,我只想选择那些不在我的数据库中的行,如果您给我一个解决方案,这将非常有用!