我只想邀请朋友加入我的应用程序,以便他们也可以使用该应用程序。为此,我得到了所有联系人,但问题是联系人正在重复。有些联系人显示2次,有些显示3次和4次。我认为我应该对查询进行“分组依据”,这样就不会显示重复项,但是我很困惑将该查询放在何处。
这是我的代码:

private ArrayList<String> conNames;
private ArrayList<String> conNumbers;
private Cursor crContacts;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.invite);
    conNames = new ArrayList<String>();
    conNumbers = new ArrayList<String>();

    crContacts = ContactHelper.getContactCursor(getContentResolver(), "");
    crContacts.moveToFirst();

    while (!crContacts.isAfterLast()) {
        conNames.add(crContacts.getString(1));
        conNumbers.add(crContacts.getString(2));
        crContacts.moveToNext();
    }

    setListAdapter(new MyAdapter(this, android.R.layout.simple_list_item_1,
            R.id.tvNameMain, conNames));

}

private class MyAdapter extends ArrayAdapter<String> {

    public MyAdapter(Context context, int resource, int textViewResourceId,
            ArrayList<String> conNames) {
        super(context, resource, textViewResourceId, conNames);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View row = setList(position, parent);
        return row;
    }

    private View setList(int position, ViewGroup parent) {
        LayoutInflater inf = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View row = inf.inflate(R.layout.liststyle, parent, false);

        TextView tvName = (TextView) row.findViewById(R.id.tvNameMain);
        final TextView tvNumber = (TextView) row.findViewById(R.id.tvNumberMain);
    tvName.setText(conNames.get(position));
        tvNumber.setText(conNumbers.get(position));
        return row;
    }
}


指导我该怎么做以避免重复的联系人

最佳答案

@阿斯兰·阿里

如果您不希望集合中有重复项,则应考虑使用HashMap。它不允许重复的键,但是允许具有重复的值。因此,由于您获取了contacts namenumber。数字将始终是唯一的,因此将数字用作键,并将名称作为您的值。

所以你的情况

Map<String, String> hm = new HashMap<String, String>();

while (!crContacts.isAfterLast()) {
        hm.put(crContacts.getString(2),crContacts.getString(1));
        crContacts.moveToNext();
}


这样,您将永远不会有重复的联系。现在遍历您的HashMap,然后将键值推到conNumbers,将名称值推到conNames

for (String key : hm.keySet()) {
   conNames.add(key);
   conNumbers.add(hm.get(key));
}


然后您获得了唯一的Arraylist。

关于android - 检索联系人时联系人重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38522371/

10-13 04:09