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());
}
}
我希望这将对您有所帮助。由于联系人和您的数据库不在同一个数据库中,因此您不能将它们的数据直接组合到同一个查询中。一些解决方法:
select name || ':magicseparator:' || number from mydatabase;
其中:magicsepator:
只是一些随机字符串,用于帮助分隔名称和数字,并防止名称和数字冲突
然后从这些结果中构造一个逗号分隔的字符串列表,然后传递到联系人查询中的选择(WHERE)条件:
"name || ':magicseparator:' || number not in (" + yourCommaSeparatedExclusionList + ")"
查看一些优秀的初学者教程,包括在Android中管理和查询您自己的数据库。感谢您的回复,我想我的问题不清楚,但我不想删除联系人,我只想选择那些不在我的数据库中的行,如果您给我一个解决方案,这将非常有用!