1

I am creating an application which will display phone numbers of a contact in alert dialog box as list.My problem is it will show duplicate numbers where the contact does not have duplicate number in phones contact application.(My asssumption is it is fetching from whatsapp number, duo number etc.)

This is my contact fetching code inside onActivityResult.

  if (resultCode == RESULT_OK) {
                switch (reqCode) {
                    case REQUEST_CODE:
                        final TextView phoneInput = (TextView) findViewById(R.id.contact);
                        Cursor cursor = null;
                        String phoneNumber = "";
                        List<String> allNumbers = new ArrayList<String>();
                        int phoneIdx = 0;
                        try {
                            Uri result = data.getData();
                            String id = result.getLastPathSegment();
                            cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[] { id }, null);
                            phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA);
                            if (cursor.moveToFirst()) {
                                while (cursor.isAfterLast() == false) {
                                    phoneNumber = cursor.getString(phoneIdx);
                                    allNumbers.add(phoneNumber);
                                    cursor.moveToNext();
                                }
                            } else {
                                //no results actions
                            }
                        } catch (Exception e) {
                            //error actions
                        } finally {
                            if (cursor != null) {
                                cursor.close();
                            }

                            final CharSequence[] items = allNumbers.toArray(new String[allNumbers.size()]);
                            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                            builder.setTitle("Choose a number");
                            builder.setItems(items, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int item) {
                                    String selectedNumber = items[item].toString();
                                    selectedNumber = selectedNumber.replace("-", "");
                                    phoneInput.setText(selectedNumber);
                                }
                            });
                            AlertDialog alert = builder.create();
                            if(allNumbers.size() > 1) {
                                alert.show();
                            } else {
                                String selectedNumber = phoneNumber.toString();
                                selectedNumber = selectedNumber.replace("-", "");
                                phoneInput.setText(selectedNumber);
                            }

                            if (phoneNumber.length() == 0) {
                                //no numbers found actions
                            }
                        }
                        break;
                }
            } else {
                //activity result error actions
            }
Anand
  • 1,866
  • 3
  • 26
  • 49

2 Answers2

1

Please try this one, hope this helps

Map<String, String> filteredList = new HashMap<>();
        if (resultCode == RESULT_OK) {
            switch (reqCode) {
                case REQUEST_CODE:
                    final TextView phoneInput = (TextView) findViewById(R.id.contact);
                    Cursor cursor = null;
                    String phoneNumber = "";
                    List<String> allNumbers = new ArrayList<String>();
                    int phoneIdx = 0;
                    try {
                        Uri result = data.getData();
                        String id = result.getLastPathSegment();
                        cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[] { id }, null);
                        phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA);
                        if (cursor.moveToFirst()) {
                            while (cursor.isAfterLast() == false) {
                                phoneNumber = cursor.getString(phoneIdx);
                                allNumbers.add(phoneNumber);
                                filteredList.put(phoneNumber,"name");
                                cursor.moveToNext();
                            }
                        } else {
                            //no results actions
                        }
                    } catch (Exception e) {
                        //error actions
                    } finally {
                        if (cursor != null) {
                            cursor.close();
                        }

                        final CharSequence[] items = allNumbers.toArray(new String[allNumbers.size()]);
                        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                        builder.setTitle("Choose a number");
                        builder.setItems(items, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int item) {
                                String selectedNumber = items[item].toString();
                                selectedNumber = selectedNumber.replace("-", "");
                                phoneInput.setText(selectedNumber);
                            }
                        });
                        AlertDialog alert = builder.create();
                        if(allNumbers.size() > 1) {
                            alert.show();
                        } else {
                            String selectedNumber = phoneNumber.toString();
                            selectedNumber = selectedNumber.replace("-", "");
                            phoneInput.setText(selectedNumber);
                        }

                        if (phoneNumber.length() == 0) {
                            //no numbers found actions
                        }
                    }
                    break;
            }
        } else {
            //activity result error actions
        }
Awais Tariq
  • 334
  • 2
  • 9
1

You can use HashMap to store the contact list. HashMap doesn't contains duplicate key, so no duplicate value will store in it.

ppreetikaa
  • 1,149
  • 2
  • 15
  • 22