안녕하세요.이 필드와 함께 ContentResolver를 사용하여 연락처 데이터베이스에서 연락처 정보를 가져 오려고합니다. 하나의 쿼리로 연락처에 대한 이름, 번호, FORMATTED_ADDRESS, PHOTO 세부 정보를 얻으려고합니다.단일 쿼리에서 연락처에 대한 세부 정보 얻기
그래서 기본적으로 연락처 당 3 개의 쿼리를 만들어이 세부 정보를 가져와야합니다.
내가 알고 싶은 것은, 더 간단하고 효율적인 방법이 무엇입니까? 이 것을 달성하는 것입니다.
하지만 아래 코드를 사용하면 예외가 발생합니다.
java.lang.IllegalArgumentException: Invalid column data1
어떤 솔루션이든 동일한 솔루션을 찾을 수 있습니까?
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS,
ContactsContract.CommonDataKinds.Photo.PHOTO};
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '1'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor contacts = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
감사를 교체
이동하지만 난 코드'java.lang.IllegalArgumentException가 구현 한 후 같은 예외를 받고 오전 : 잘못된 열을 data1' –
지금 시도해보십시오, 당신은 나쁜 uri가 있습니다. 나는 그것을 즉시 알아 채지 못했다. – Sajmon
선택 항목을 삭제하고 selectionArgs를 쿼리에서 제외하고 나면 작동하지만이 대신에 FORMATTED_ADDRESS를 지정하면 PHONE_NUMBER가 그 이유를 알 수 없습니다. 하지만 디버깅에 나는 그것을 반환하는 열을 발견 "_id, display_name, data1, data1, data15"그것의 원래 이름을주지 않을거야. 또 하나의 문제는 적은 수의 커서를 제공한다는 것입니다. 기록이 남아 있고 연락처 책에 더 많은 기록이 있습니다 –