2012-01-10 5 views
2

내 목록보기에서 연락처 이름을 클릭하면 연락처 데이터를 가져 오려고합니다. 아래 코드에 따라 연락처의 ID를 성공적으로 기록 할 수 있지만 ContactsContract를 사용하여 데이터를 검색하지 못했습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 고정 코드, 지금연락처 ID에서 전화 번호 가져 오기 : android

public void onCreate(Bundle savedInstanceState) 
    { 
     Log.v(TAG, "Activity State: onCreate()"); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.contact_manager); 
     mContactList = (ListView) findViewById(R.id.contactList); 
     populateContactList(); 

     mContactList.setOnItemClickListener(new OnItemClickListener() { 
      String strid = Long.toString(id);    
      Cursor result = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts._ID +" = ?", new String[]{strid}, null); 
      if (result.moveToFirst()) { 
       Cursor c = getContentResolver().query(Data.CONTENT_URI, 
          new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL}, 
          Data.RAW_CONTACT_ID + "=?" + " AND " 
            + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'", 
          new String[] {String.valueOf(strid)}, null); 
       if(c.moveToFirst()){ 
        int phoneColumn = c.getColumnIndex("data1"); 
        String phoneNumber = c.getString(phoneColumn); 
        Log.d("DATA",phoneNumber); 
       } 
      } 
     }); 
    } 

EDIT 1 일 :

EDIT 2 (별로 소용이 Retrieve Contact Phone Number From URI in Android을 시도했다) 몇 가지 중요한 물건을 잊어 버렸습니다. 이 코드는 Android 개발자 사이트의 ContactManager 예제에서 수정되었습니다. 유효한 ContactID가있는 가정

/** 
* Populate the contact list based on account currently selected in the account spinner. 
*/ 
private void populateContactList() { 
    // Build adapter with contact entries 
    Cursor cursor = getContacts(); 
    String[] fields = new String[] { 
      ContactsContract.Data.DISPLAY_NAME 
    }; 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor, 
      fields, new int[] {R.id.contactEntryText}); 
    mContactList.setAdapter(adapter); 
} 

/** 
* Obtains the contact list for the currently selected account. 
* 
* @return A cursor for for accessing the contact list. 
*/ 
private Cursor getContacts() 
{ 
    // Run query 
    Uri uri = ContactsContract.Contacts.CONTENT_URI; 
    String[] projection = new String[] { 
      ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME 
    }; 
    String selection = null; 
    String[] selectionArgs = null; 
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
} 
+0

그런 질문에서 무엇을 시도 했습니까? – tidbeck

+1

ID를 어떻게 목록에 저장 했습니까? 연락처 테이블에 ID가 있습니까? RawContact 테이블? populateContactList에 대한 코드를 게시 할 수 있습니까? – kingston

답변

3

, 당신은이 작업을 수행 할 수 있습니다

Cursor result = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, 
     ContactsContract.Contacts._ID +" = ?", 
     new String[]{contactID}, null);  
if (result.moveToFirst()) { 

    for(int i=0; i< result.getColumnCount(); i++){ 
     Log.i("CONTACTSTAG", result.getColumnName(i) + ": " 
     + result.getString(i)); 
    }   
} 

당신은 ContactsContract.Contacts.CONTENT_URI하고 쿼리하는 테이블에 절을 변경해야합니다. 위 코드는 연락처에 대한 일반적인 정보를 출력합니다.

+0

안녕하세요. 거기에서 데이터 테이블을 쿼리하고 필요한 것을 찾을 수있었습니다. 새 쿼리로 코드를 업데이트했습니다. –

관련 문제