2013-04-19 18 views
5

私は、アプリケーション内のリストビューでユーザーの電話から連絡先のリストを表示しようとしています。私は連絡先を取得することができますが、連絡先の中には複数の携帯電話番号があるので、その人を何度も表示したいと思っています。Androidはアプリケーションに連絡先を取得します

Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    String name, number = ""; 
    String id; 
    c.moveToFirst(); 
    for (int i = 0; i < c.getCount(); i++) { 
     name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); 

     if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
      Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, 
        null); 
      while (pCur.moveToNext()) { 
       number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      } 
     } 
     Log.i("name ", name + " "); 
     Log.i("number ", number + " "); 
     c.moveToNext(); 

ユーザーが表示したい回数だけ表示したいですか?私は10桁の長さの携帯電話番号だけに基づいてそれを短いリストにすることさえできますか?

Example 

Name: John Doe 
Number 1: xxxxxxxxx 
Number 2: xxxxxxxxx 

Name: Sarah 
Number 1: xxxxxxxxx 

これは

John Doe xxxxxxxxx 
John Doe xxxxxxxxx 
Sarah  xxxxxxxxx 
+0

ご質問はありますか? – mach

+0

@machユーザーが表示されている数字の回数だけ表示します。私は10桁の長さの携帯電話番号だけに基づいてそれを短いリストにすることさえできますか? –

+0

ExpandableListViewを使用し、その数値をサブ要素として使用したくないですか? – mach

答えて

2

を次のように以下のコードは、電話番号を持つすべての連絡先を取得します。この

List<PhoneItem> phoneNoList = new ArrayList<PhoneItem(); 
Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
String name, number = ""; 
String id; 
c.moveToFirst(); 
for (int i = 0; i < c.getCount(); i++) { 
    name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
    id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)); 

    if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
     Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, 
       null); 
     while (pCur.moveToNext()) { 
      phoneNoList.add(new PhoneItem(name, pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)))); 
     } 
    } 
    c.moveToNext(); 


} 

for (PhoneItem row : phoneNoList) { 
    Log.i("name", row.name); 
    Log.i("number", row.number+""); 
} 

[...] 

private class PhoneItem { 
    String name; 
    String phone; 

    public PhoneItem(String name, String phone) { 
     this.name = name; 
     this.phone = phone; 
    } 
} 
1

のようなものを試してみてください3つのリスト項目も返す必要があります。同じ連絡先が別のグループに属する可能性があるため、重複している可能性があります。あなたはループする必要があり、複製を取り除く必要があります。

String[] projection = new String[]{ ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
            ContactsContract.CommonDataKinds.Phone.NUMBER,}; 
String selection = ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER + "=?" ; 
String[] selectionArgs = new String[] {"1"};        
Cursor c = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            projection, 
            selection, 
            selectionArgs, 
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME 
            + ", " + ContactsContract.CommonDataKinds.Phone.NUMBER); 
関連する問題