Ошибка получения контактов - как это исправить? - PullRequest
1 голос
/ 26 мая 2019

Моя проблема в том, что я перечисляю контакты, телефонные номера отображаются нормально, но я не могу заставить работать имена.

Я пробовал несколько способов получить DISPLAY_NAME, но ни один из нихработали

    private void initializeRecyclerView() {
        mUserList = findViewById(R.id.userList);
        mUserList.setNestedScrollingEnabled(false);
        mUserList.setHasFixedSize(false);
        mUserListLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayout.VERTICAL, false);
        mUserList.setLayoutManager(mUserListLayoutManager);
        mUserListAdapter = new UserListAdapter(userList);
        mUserList.setAdapter(mUserListAdapter);
        getContactsList();
    }

This is my adaptor ^^

    private void getContactsList(){
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        while(phones.moveToNext()){
            String phone = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

            UserObject mContact = new UserObject(name, phone);
            userList.add(mContact);
            mUserListAdapter.notifyDataSetChanged();
        }
    }

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Вам нужно добавить PROJECTION

Вы можете добавить этот метод в свой код

 public Cursor getContact(Context context) {
        String[] PROJECTION = new String[]{
                ContactsContract.RawContacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER
               };
        Uri uri = CommonDataKinds.Phone.CONTENT_URI;

        String order = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";// LIMIT " + limit + " offset " + lastId + "";
        try {
            return context.getContentResolver().query(uri, PROJECTION, null, null, order);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

И получить имя, используя

ContactsContract.Contacts.DISPLAY_NAME

Счастливое кодирование

0 голосов
/ 27 мая 2019

я получаю контакты с этим: -

private void getContactsList(){
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        while(phones.moveToNext()){
            String phone = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
 UserObject mContact = new UserObject(name, phone);
            userList.add(mContact);
        }

 mUserListAdapter = new UserListAdapter(userList);
    mUserList.setAdapter(mUserListAdapter);
    }

, а также установить разрешение для получения контактов: -

<uses-permission android:name="android.permission.READ_CONTACTS" />
...