100개의 주소록데이터가 있어용
제가 20개의 전화번호를 가지고 이 100개의 주소록데이터중에 일치하는 번호가 있따면
해당 번호에 이름을 붙여주고 싶어요....
그래서 일단 주소록을 얻어오는것을 만들었어요...
주소록 100개를 20개의 전화번호와 비교를 하려고 아래와 같은 구문을 넣었어요....
Cursor phones = ctx.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + id, null, null);
if (phones != null) {
while (phones.moveToNext()) {
if(phone.equals(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)))){
name = cursor.getString(1);
break;
}
}
}
최악의 경우 100 * 20개에 가까운 반복문을 돌려야 할거 같아요...
그래서 주소록에서 100개의 데이터를 가져오지 않고
selection 문으로 where number_column = 특정전화번호
이렇게 해서 일치하는 번호가 없다면 0개
일치하는 번호가 1개이상 있따면 1개이상개
이렇게 얻어오면 100*20개의 반복문을 돌지 않아도 될것 같아서
아래와 같은 함수를 만들어봤어요
private Cursor getURI(String phone) {
Uri people = Contacts.CONTENT_URI;
String[] projection = new String[] {Contacts.DISPLAY_NAME};
String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + "=" + phone;
return ctx.getContentResolver().query(people, projection, selection, null, null);
}
헌데 에러가 났어요.... where 절에서 "data1" 컬럼명이 존재하지 않는다고 에러가 났어요...
ContactsContract.CommonDataKinds.Phone.NUMBER 는 상수값으로 "data1" 이라는 String 값이더라구요
왜 에러가 날까요...?
selection 문 없이 100개의 주소록을 모두 가져와서 비교할땐
phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)) 이렇게하여
분명 ContactsContract.CommonDataKinds.Phone.NUMBER를 통해 전화번호를 가져왔는데 말이죠....
물론 조금 다르긴 하죠....
성공하는 경우는 getString(getColumnIndex()) 함수를 사용하여 ContactsContract.CommonDataKinds.Phone.NUMBER를 이용했고
selection 문을 줄땐 Cursor를 생성하는 부분이라 getString(getColumnIndex()) 함수를 쓸 수가 없었죠...
어떻게 하면 제가 원하는 방법대로 구현할 수 있을까요? ㅠ_ㅠ
자답입니다.
selection으로 하지 않고 Uri.withAppendedPath();를 통해 해결했습니다..
도움 받은 링크는 아래 있습니다.
http://stackoverflow.com/questions/6721134/get-contact-name-given-a-phone-number-in-android