使用Number - Android从PhoneBook获取联系人姓名

时间:2017-06-02 06:06:15

标签: android android-contacts android-sms

我正在处理短信应用,我需要显示短信发送者的姓名。 例如,如果有人发送了该消息,则应用程序将从电话簿中检查其名称,并显示该消息是否存在,然后显示空或空字符串。 我尝试了一些代码,但无法获得,有一个错误。

 Exception smsReceiverandroid.database.CursorIndexOutOfBoundsException: After last row.

这是代码:

String  displayName="";
                //Resolving the contact name from the contacts.
                Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(senderNum));
                Cursor c = context.getContentResolver().query(lookupUri, new String[]{ContactsContract.Data.DISPLAY_NAME},null,null,null);
                try {
                    c.moveToFirst();
                    displayName = c.getString(c.getColumnIndex( ContactsContract.Contacts.DISPLAY_NAME ));
                    //displayName = c.getString(0);
                    String ContactName = displayName;
                    Log.i("com.azeem.Debug", displayName);
                    Log.i("com.azeem.Debug", ContactName);
                    Toast.makeText(context, ContactName, Toast.LENGTH_LONG).show();

                } catch (Exception e) {
                    Log.e("SmsReceiver", "Exception smsReceiver" +e);
                }finally{
                    c.close();
                }

senderNum是发送短信的人数。 你可以告诉我有关错误的信息,似乎我试图访问不可用的index,但我该如何获取联系人姓名

1 个答案:

答案 0 :(得分:1)

我检查了你的代码,它正常工作。在得到任何东西之前,您需要检查cursor 这是我的代码,请查看此内容。

Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(senderNum));
Cursor c = context.getContentResolver().query(lookupUri, new String[]{ContactsContract.Data.DISPLAY_NAME},null,null,null);
try {
    if(c.moveToFirst()) {
        displayName = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        //displayName = c.getString(0);
        String ContactName = displayName;
        Log.i("com.azeem.Debug", displayName);
        Log.i("com.azeem.Debug", ContactName);
        Toast.makeText(context, ContactName, Toast.LENGTH_LONG).show();
    }
} catch (Exception e) {
    e.printStackTrace();
}finally{
    c.close();
}