Как получить контакты, которые находятся в данном списке

#java #android

#java #Android

Вопрос:

Моя цель — создать список, который поступает из API, который включает в себя номера телефонов пользователей моего приложения. Поэтому мне нужно только увидеть контакты, которые есть в этом списке. Но я не знаю, как установить приведенный ниже код для этого. Я имею в виду, что ниже он открывает контакты со всеми контактами, которые есть в телефоне. Мне не нужно видеть все контакты, кроме тех, которые есть в данном списке

 Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                startActivityForResult(contactPickerIntent,1);

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode){
            case 1 :
                if (resultCode == Activity.RESULT_OK) {
                    Uri contactData = data.getData();
                    ContentResolver cr = getContentResolver();
                    Cursor cur = cr.query(contactData, null, null, null, null);
                    if (cur.getCount() > 0) {// thats mean some resutl has been found
                        if(cur.moveToNext()) {
                            String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                            String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                            Log.e("Names", name);
                            if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
                            {
                                // Query phone here. Covered next
                                Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID  " = "  id,null, null);
                                while (phones.moveToNext()) {
                                    String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                                    Log.e("Number", phoneNumber);
                                }
                               phones.close();
                            }

                        }
                    }
                    cur.close();
                }
                break;
        }
    }
 

Комментарии:

1. Итак, вы пытаетесь получить контакты, которые являются общими в ответе API и ContentResolver, в какой-то список?

2. @rajan. кали точно

Ответ №1:

Подумайте, что у вас уже есть a list , в котором есть данные из API, и создайте новый список, в котором будут общие элементы из API list и ContentResolver , теперь, чтобы добавить элементы в нужный вам список, ContentResolver проверьте, есть ли PhoneNumber в списке API, прежде чем добавлять его в вывод.

 ArrayList<String> apiPhoneNumbers;// this data is populated by API
ArrayList<String> commonPhoneNumbers = new ArrayList<>();
//inside onActivityResult
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0){
  // Query phone here. Covered next
  Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID  " = "  id,null, null);
  while (phones.moveToNext()) {
      String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
      Log.e("Number", phoneNumber);
      if(apiPhoneNumbers.contains(phoneNumber)){//add to output only if it is in API list
          commonPhoneNumbers.add(phoneNumber);
      }
  }
  phones.close();
}
 

Комментарии:

1. это решение для выбора контактов после контакта. Что мне нужно, так это то, что намерение, открывающее приложение контактов, будет иметь только числа, поступающие из ответа api. Я не смог найти никакого решения, поэтому я не знаю, возможно ли это. Спасибо за ответ, приятель