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()) 함수를 쓸 수가 없었죠...

 

어떻게 하면 제가 원하는 방법대로 구현할 수 있을까요? ㅠ_ㅠ