2013-05-20 2 views
1

연락처에서 별명 및 SIP 주소를 쿼리하려고합니다. 내가 겪고있는 문제는 둘 다 DATA1 열에 저장된다는 것입니다. 그래서 쿼리를 실행할 때, 나는 닉네임 만 검색합니다. 두 가지를 모두 가져 와서 아래 SimpleCursorAdapter에 전달하는 방법은 무엇입니까? SimpleCursorAdapter를 사용커서로드/어댑터가 올바른 값을 표시하지 않습니다.

CursorLoader c = new CursorLoader(getActivity(), baseUri, CONTACTS_NUMBER_PROJECTION2, Data.MIMETYPE+" ='" + Nickname.CONTENT_ITEM_TYPE+"'", null, ORDER); 

private static final String[] CONTACTS_NUMBER_PROJECTION2 = new String[] { 
SipAddress.DISPLAY_NAME, 
SipAddress.SIP_ADDRESS, 
BaseColumns._ID}; 

, 모두 Nickname.NAMESipAddress.SIP_ADDRESS는 별명입니다.

SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(), R.layout.contact_list, null, 
          new String[] {Nickname.NAME, SipAddress.SIP_ADDRESS}, 
          new int[] {R.id.text1, R.id.text2}, 0); 

스크린 샷은 다음과 같습니다. 작은 글꼴은 Sip Address 여야합니다.

Nickname.CONTENT_ITEM_TYPE에서 SipAddress.CONTENT_ITEM_TYPE으로 변경하면 닉네임 대신 Sip Addresses가 표시됩니다. 나는 둘 다 나타나는 방법을 모르겠습니다.

enter image description here

업데이트 :

나는 각각 Nickname.DATA7 및 Nickname.DATA *에 Nickname.NAME 및 SipAddress.SIP_ADDRESS을 변경했습니다. 내 selectionArgs에 'null'을 추가했습니다.

enter image description here

업데이트 2 : 나는 StructuredName.DISPLAY_NAME 및 StructuredName에서 모금 및 별명 값을 저장

사실이 아닌 같은 행에 표시 할 닉네임과 SIP 주소를 모두받을 수 있나요 .GIVEN_NAME 다음 어댑터와 함께 그들을로드했습니다. documentation으로 enter image description here

if (key.equals("alias")) { 
          contacts.add(ContentProviderOperation 
            .newInsert(
              ContactsContract.Data.CONTENT_URI) 
            .withValueBackReference(
              ContactsContract.Data.RAW_CONTACT_ID, 
              0) 
            .withValue(
              ContactsContract.Data.MIMETYPE, 
              ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
            .withValue(
              ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, 
              userDict.get(key).toString()) 
            .build()); 
         } 
if (key.equals("sipExt")) { 
          contacts.add(ContentProviderOperation 
            .newInsert(
              ContactsContract.Data.CONTENT_URI) 
            .withValueBackReference(
              ContactsContract.Data.RAW_CONTACT_ID, 
              0) 
            .withValue(
              ContactsContract.Data.MIMETYPE, 
              ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
            .withValue(
              ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, 
              userDict.get(key).toString()) 
            .build()); 
         } 

답변

1

다른 MIME 형식에 대한 연락 정보가 다른에 저장됩니다 말한다 :이 결과였다 ' ""

Data.MIMETYPE + "="+ StructuredName.CONTENT_ITEM_TYPE +'로 selectionArgs 변경 하나의 연락처 데이터 테이블에 레코드가 있으며 contactId와 일대일 관계가 있습니다. 그 때문에 한 커서 행에서 한 모금 수와 닉네임을 얻는 것은 사실상 불가능합니다 (제 생각 엔). , 두 개의 열

contacts.add(ContentProviderOperation 
           .newInsert(
             ContactsContract.Data.CONTENT_URI) 
           .withValueBackReference(
             ContactsContract.Data.RAW_CONTACT_ID, 
             0) 
           .withValue(
             ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
           .withValue(
             ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, 
             currentNickName) 
           .withValue(
             ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, 
             currentSipNo) 
           .build()); 

이 목록의 형태로 두 개의 서로 다른 MIME 형식의 데이터를 표시하려면 : 여기

는 하나의 삽입을 사용 갈까요 두 StructuredName 값을 삽입하기위한 데이터베이스 스키마 조각 courtesy of BreatheInMyVoid/habrahabr.ru

입니다 GridView은 올바른 순서 (contactId에 의해 먼저, 다음에 mimetype에 대해)가 설정되면 사용될 수 있습니다. 전체 행 정의가 원하는 경우

, 당신은 contactId의에 의해 주문이 cusors (닉 및 SIP)의 데이터를 사용하여 작성 모금 - 닉 쌍을 포함하는 간단한 개체의 ArrayList를을 만든 다음 그들을 보여 배열 어댑터를 사용할 수 있습니다 목록보기.

또는 두 개의 커서를 사용자 지정 어댑터에로드 할 수 있습니다 (닉네임과 sip 넘버). 예를 들어 SimpleCursorAdapter를 확장하여 다른 커서를 기본 커서를 따라 생성자에 전달합니다.그런 다음 newView/bindView에서 추가 커서에서 조회를 수행하고 해당 데이터를 가져올 수 있습니다.

+0

Data.MIMETYPE을 제거 하시겠습니까? 알 수없는 열 유형은 Nickname.DATA5, Nickname.DATA6 등을 의미합니까? – ono

+0

예. 이 경우 주소록 제공자의 동작이 지정되지는 않지만 정상적으로 수행되기를 기대할 수 있습니다. 작은 실험 –

+0

Nickname.NAME 및 SipAddress.SIP_ADDRESS를 각각 Nickname.DATA7 및 Nickname.DATA *로 변경했습니다. 내 selectionArgs에 'null'을 추가했습니다. 나는 실제로 동일한 행에 나타나지는 않지만 닉네임과 모금 주소를 모두 얻습니다. 업데이트 된 질문을 확인하고 스크린 샷을 추가했습니다. – ono

관련 문제