gpt4 book ai didi

java - 如何从游标中删除唯一值

转载 作者:行者123 更新时间:2023-12-01 19:08:16 24 4
gpt4 key购买 nike

我正在开发一个应用程序,其中我只应该向用户显示重复的电话联系人,以便他们可以删除重复项。 Duplicates

到目前为止,我可以使用以下代码显示所有联系人:

主要 Activity :

private void showContacts() {
Cursor cursor = ContactHelper.getContactCursor(getContentResolver(),"");
String[] fields = new String[]{ContactsContract.Data.DISPLAY_NAME};

adapter =new SimpleCursorAdapter(this,android.R.layout.simple_list_item_multiple_choice,cursor,fields,new int[]{android.R.id.text1});
listView.setAdapter(adapter);
adapter.notifyDataSetChanged(); }

ContactHelper.GetContactsCursor函数:

public static Cursor getContactCursor(ContentResolver contactHelper,
String startsWith) {

String[] projection = { ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER };
Cursor cur = null;

try {
if (startsWith != null && !startsWith.equals("")) {
cur = contactHelper.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " like \"" + startsWith + "%\"", null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " ASC");
} else {
cur = contactHelper.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection, null, null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " ASC");
}
cur.moveToFirst();
} catch (Exception e) {
e.printStackTrace();
}

return cur;
}

private static long getContactID(ContentResolver contactHelper,
String number) {
Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(number));

String[] projection = { ContactsContract.PhoneLookup._ID };
Cursor cursor = null;

try {
cursor = contactHelper.query(contactUri, projection, null, null,
null);

if (cursor.moveToFirst()) {
int personID = cursor.getColumnIndex(ContactsContract.PhoneLookup._ID);
return cursor.getLong(personID);
}

return -1;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
cursor = null;
}
}

return -1; }

如何过滤光标中的唯一值?如果可能的话只根据电话号码保留重复的联系人?

最佳答案

也许这会起作用

    try {
if (startsWith != null && !startsWith.equals("")) {
cur = contactHelper.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " like \"" + startsWith + "%\""
+ " AND "
+ ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " IN (SELECT " + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " as name FROM view_data GROUP BY " +ContactsContract.CommonDataKinds.Phone.NUMBER + " HAVING COUNT(name)>1)",
null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " ASC");
} else {
cur = contactHelper.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " IN (SELECT " + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " as name FROM view_data GROUP BY " +ContactsContract.CommonDataKinds.Phone.NUMBER + " HAVING COUNT(name)>1)",
null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " ASC");
}
cur.moveToFirst();
} catch (Exception e) {
e.printStackTrace();
}

关于java - 如何从游标中删除唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59511434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com