2014-02-17 5 views
0

Я пытаюсь получить правильное имя контакта с номера телефона, чтобы отобразить его в ListView.Получение правильного имени контакта по телефону

Но я получаю каждый раз только то же самое имя контактного лица для всех телефонных номеров ...

Вот мой код:

private String getContactName(String string){ 
    String name=null; 

    ContentResolver cr=getContentResolver(); 
    Cursor cur=cr.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null); 

    if(cur.getCount()>0){ 
     while(cur.moveToNext()){ 
      String id=cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
      name=cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     } 

    } 
    return name; 
} 


public void onClick(View v) 
{ 
    ContentResolver contentResolver=getContentResolver(); 
    Cursor cursor=contentResolver.query(Uri.parse("content://sms/inbox"),null,null,null,null); 

    int indexBody=cursor.getColumnIndex(SmsReceiver.BODY); 
    int indexAddr=cursor.getColumnIndex(SmsReceiver.ADDRESS); 

    // int indexAddr = Integer.parseInt(getContactName(Integer.toString(cursor.getColumnIndex(SmsReceiver.ADDRESS)))); 

    //getContactName(Integer.toString(indexAddr)); 
    //// 

    if(indexBody<0||!cursor.moveToFirst())return; 

    smsList.clear(); 

    do 
    { 
     //String str = "Sender: " + cursor.getString(indexAddr) + "\n" + cursor.getString(indexBody); 
     String str="Sender: "+getContactName(cursor.getString(indexAddr))+"\n"+cursor.getString(indexBody); 
     smsList.add(str); 
    } 
    while(cursor.moveToNext()); 


    ListView smsListView=(ListView)findViewById(R.id.SMSList); 
    registerForContextMenu(smsListView); 

    smsListView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,smsList)); 
    smsListView.setOnItemClickListener(this); 
} 

Я не могу найти, где моя ошибка ... и получить одно и то же имя для всех номеров отправителей.

Спасибо

+0

Когда вы получаете свои имена, вы не перемещаетеToFirst курсора. Итак, вы на последнем и немедленно выходите, получая только последнее имя (которое не обязательно будет в алфавитном порядке). –

ответ

1

Это правильный код для вашей функции.

private String getContactName(String phoneNumber) 
{ 
    String name = null; 
    ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, 
     Uri.encode(phoneNumber)), new String[]{ PhoneLookup.DISPLAY_NAME }, null, null, null); 
    if(cur != null){ 
     try{ 
      if(cur.getCount() > 0){ 
       if(cur.moveToFirst()){ 
        name = cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME)); 
       } 
      } 
     } 
     finally{ 
      cur.close(); 
     } 
    } 
    return name; 
} 
+0

Спасибо! Это работает!! –

Смежные вопросы