Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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
Java 如何使用ListView删除Android Studio display中的重复联系人_Java_Android_Android Studio_Duplicates_Android Contacts - Fatal编程技术网

Java 如何使用ListView删除Android Studio display中的重复联系人

Java 如何使用ListView删除Android Studio display中的重复联系人,java,android,android-studio,duplicates,android-contacts,Java,Android,Android Studio,Duplicates,Android Contacts,我正在编写一个程序来显示我在hp中的联系人列表,但我总是得到重复的联系人。我的代码哪里不正确 这是我的密码 在这里,我对如何在不需要将重复联系人添加到listview的情况下创建筛选器感到困惑: contactModelArrayList=新建ArrayList; 字符串[]投影=新字符串[]{ Contacts contract.CommonDataTypes.Phone.NUMBER, Contacts contract.CommonDataTypes.Phone.DISPLAY\u NAM

我正在编写一个程序来显示我在hp中的联系人列表,但我总是得到重复的联系人。我的代码哪里不正确

这是我的密码

在这里,我对如何在不需要将重复联系人添加到listview的情况下创建筛选器感到困惑:

contactModelArrayList=新建ArrayList; 字符串[]投影=新字符串[]{ Contacts contract.CommonDataTypes.Phone.NUMBER, Contacts contract.CommonDataTypes.Phone.DISPLAY\u NAME }; 游标phones=getContentResolver.queryContactsContract.CommonDataTypes.Phone.CONTENT\u URI, 预测 Contacts contract.Contacts.IN_VISIBLE_组+=“1”, 无效的 Contacts contract.CommonDataTypes.Phone.DISPLAY\u NAME+核对本地化的ASC; while phones.moveToNext { 字符串名称=phones.getStringphones.getColumnIndexContactsContract.CommonDataTypes.Phone.DISPLAY\u名称; String phoneNumber=phones.getStringphones.getColumnIndexContactsContract.CommonDataTypes.Phone.NUMBER; ContactModel ContactModel=新的ContactModel; contactModel.setNamename; contactModel.setNumberphoneNumber; contactModelArrayList.addcontactModel; } 电话。关闭; contactAllAdapter=新contactAllAdapter此,contactModelArrayList; listView.setAdaptercontactAllAdapter; 这是所有适配器的文件

公共类ContactAllAdapter扩展了BaseAdapter{ 私人语境; 私有ArrayList模型; 私人字符串kode,nomor; public ContactAllAdapterContext,ArrayList contactModels{ this.context=上下文; this.contactModels=contactModels; } @凌驾 公共int getViewTypeCount{ ifgetCount>0{ 返回getCount; }否则{ 返回super.getViewTypeCount; } } @凌驾 公共整数getCount{ 返回模式。大小; } @凌驾 公共对象getItemint位置{ 返回contactModels.getposition; } @凌驾 公共长GetItemId位置{ 返回0; } @凌驾 公共视图getViewfinal int位置、视图转换视图、视图组父视图{ 最终持票人; 如果convertView==null{ 支架=新的视图支架; LayoutFlater充气器=LayoutFlater上下文 .getSystemServiceContext.LAYOUT\u充气机\u服务; convertView=充气机.充气机.布局.行\所有\触点,空,真; holder.cname=convertView.findviewbydr.id.contact\u name; holder.cnumber=convertView.findviewbydr.id.contact_号码; holder.cinvite=convertView.findviewbydr.id.contact\u invite; convertView.setTagholder; }否则{ //getTag将viewHolder对象集作为标记返回给视图 holder=ViewHolderconvertView.getTag; } holder.cname.setTextcontactModels.getposition.getName; holder.cnumber.setTextcontactModels.getposition.getNumber; holder.cinvite.SetOnClickListener新建视图.OnClickListener{ @凌驾 公共视图v{ 最后一个字符串appPackageName=context.getPackageName; String text=context.getResources.getStringR.String.share\u app\u text; 字符串链接=https://play.google.com/store/apps/details?id= +appPackageName;//应用链接是使用包名称自动生成的 Intent sendIntent=新建INTENTENT.ACTION\u视图; sendIntent.putExtrasms\u正文,text+\n\n+链接; sendIntent.PuterAddress,contactModels.getposition.getNumber; sendentent.setTypevnd.android-dir/mms-sms; context.startactivitysendit; } }; 返回视图; } 私有类视窗持有者{ 受保护的文本视图cname、cnumber; 保护钮扣; } } 和这个接触模型的文件类

公共类模型{ 私有字符串名称、编号; 公共字符串getName{ 返回名称; } public void setNameString名称{ this.name=名称; } 公共字符串getNumber{ 返回号码; } 公共无效集合编号字符串编号{ 这个数字=数字; } }
在活动的第一段代码中:

    Set<ContactModel> contactModelSet = new HashSet<>();

    // the same ...

    ArrayList<ContactModel> contactModelArrayList = new ArrayList<>(contactModelSet);

    contactAllAdapter = new ContactAllAdapter(this,contactModelArrayList);

这是我的使用集截图,而不是联系人列表。然后将集合转换为列表l=新的ArrayListset,集合将避免重复。但要注意,ContactModel必须实现比较和相等。你能给我举个例子吗?它是一样的,不起作用。。。仍然显示重复的联系人您可以调试或记录相同的联系人吗?Java集合不允许equals对象,所以您的ContactModel中一定有一些东西。只需在添加到集合之前打印出对象。并在ContactModel中实现了一个很好的toString方法,以查看名称和编号在使用c时是否出现了问题
接触数据?因为我的查询就像是在手机上记录所有的联系人数据,现在我的手机上有了一个谷歌账号wa等等,它似乎与联系人同步。。。那么,问题出在哪里呢?可能是的,但是如果你有两个重复的触点,并且在一个集合中放置两个相等的对象,那么集合将只接受一个。对于,我们实现了equals方法。数字获取值例如0857-9119-8270和085791198270。。。那么,如何把那个号码改成相同的号码呢?和任何值,例如+62896-7975-9830和+6289679759830。。。你能帮我处理这个案子吗?这几天我被困住了:'
@Override
public int hashCode() {
    // calculate hash code if needed, something like this
    return this.name.hashCode() + this.number.hashCode();
}

@Override
public boolean equals(Object obj) {
    if (obj instanceof ContactModel) {
        ContactModel cm = (ContactModel) obj;
        return this.getName().equals(cm.getName()) && this.getNumber().equals(cm.getNumber());
    }
    return false;
}

@Override
public int compareTo(ContactModel o) {
    // implement if you need to order
    // don't know your criteria
    // must return -1, 0, 1 if this is less, equal or greater than o
    return 0;
}