我正在处理短信应用,我需要显示短信发送者的姓名。 例如,如果有人发送了该消息,则应用程序将从电话簿中检查其名称,并显示该消息是否存在,然后显示空或空字符串。 我尝试了一些代码,但无法获得,有一个错误。
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
,但我该如何获取联系人姓名
答案 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();
}