2012-10-15 2 views
2

안드로이드 연락처 작업 : 연락처가 두 가지가 있습니다나는 모든 안드로이드 연락처에서 정보를 가져올 필요

  • 휴대 전화
  • 생년월일

경우 또는 더 많은 휴대 전화 번호, 그것은 여러 번 선택에 맞아야합니다.

이제 필자는 ContentResolver.Query()을 사용하여 필수 열을 가져 왔지만 조인 테이블보다는 두 번 이상 쿼리해야합니다.

Android 연락처에서 여러 데이터 필드를 쿼리하려면 어떻게해야합니까?

e.e. 나는 SQL 쿼리 같은 것을 실행해야합니다 : 당신은 결국 ContactsContract.Data 테이블에 저장됩니다 언급 한

SELECT 
    dName.Data2 as [firstName] 
    , dName.Data3 as [lastName] 
    , dPhone.Data1 as [cellPhone] 
FROM 
    raw_contacts 
INNER JOIN data as dName on dName.RAW_CONTACT_ID = Contacts._ID and dName.MIME_TYPE = ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE 
INNER JOIN data as dPhone on dName.RAW_CONTACT_ID = Contacts._ID and dName.MIME_TYPE = ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE 

답변

1

모든 필드를, 그래서 필요 조인 없습니다. 특정 MIME 형식 선택하는 동안 당신은 단지뿐만 아니라 각 MIME 유형에 대한 저장됩니다, (phoneevent을 생일 인), 데이터 테이블의 모든 데이터를 조회하기 위해 전체 연락처 이름 및 연락처-ID가 필요합니다 :

Map<Long, List<String>> contacts = new HashMap<Long, List<String>>(); 

String[] projection = {Data.CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.DATA1, Data.DATA2, Data.DATA3}; 
String selection = Data.MIMETYPE + " IN ('" + Phone.CONTENT_ITEM_TYPE + "', '" + Event.CONTENT_ITEM_TYPE + "')"; 
Cursor cur = cr.query(Data.CONTENT_URI, projection, selection, null, null); 

while (cur != null && cur.moveToNext()) { 
    long id = cur.getLong(0); 
    String name = cur.getString(1); // full name 
    String mime = cur.getString(2); // phone/birthday 
    String data = cur.getString(3); // the actual info, e.g. +1-212-555-1234 

    String kind = "unknown"; 

    switch (mime) { 
     case Phone.CONTENT_ITEM_TYPE: 
      kind = "phone"; 
      break; 
     case Email.CONTENT_ITEM_TYPE: 
      Event = "birthday"; 
      break; 
    } 
    Log.d(TAG, "got " + id + ", " + name + ", " + kind + " - " + data); 

    // add info to existing list if this contact-id was already found, or create a new list in case it's new 
    List<String> infos; 
    if (contacts.containsKey(id)) { 
     infos = contacts.get(id); 
    } else { 
     infos = new ArrayList<String>(); 
     infos.add("name = " + name); 
     contacts.put(id, infos); 
    } 
    infos.add(kind + " = " + data); 
} 
관련 문제