【发布时间】:2018-09-16 14:08:28
【问题描述】:
我正在对联系人使用 ACTION_PICK 意图,我想从选择的联系人中提取姓名和电话。
private static final int CONTANTS_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_urgent_contacts);
Intent contact_picker = new Intent(Intent.ACTION_PICK);
contact_picker.setType(ContactsContract.Contacts.CONTENT_TYPE);
startActivityForResult(contact_picker, CONTANTS_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == CONTANTS_REQUEST_CODE && resultCode == RESULT_OK){
onContactPicked(data);
}
}
private void onContactPicked(Intent data) {
Cursor cursor = null;
try {
String contact_phoneNo =null;
String contact_name;
Uri uri = data.getData();
cursor = getContentResolver().query(uri, null, null, null, null);
if(cursor != null && cursor.moveToFirst()){
int nameIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
contact_name = cursor.getString(nameIndex);
Integer hasPhone = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
String phone = null;
if (hasPhone > 0) {
int phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
contact_phoneNo = cursor.getString(phoneIndex);
}
Toast.makeText(this, contact_name+" was added to your urgent contact list", Toast.LENGTH_SHORT).show();
Toast.makeText(this, "phone number: "+contact_phoneNo, Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
重新接收联系人姓名可以正常工作。问题出在电话号码上。
该应用程序没有崩溃,但我在 Logcat 中看到指向 contact_phoneNo = cursor.getString(phoneIndex) 的错误
感谢您的帮助
【问题讨论】:
-
可能重复:stackoverflow.com/questions/11218845/… - 您查询
Contacts表,但ContactsContract.CommonDataKinds.Phone.NUMBER列在Data表中。 -
当我将其更改为 ContactsContract.CommonDataKinds.Phone.NUMBER 时,无论我选择什么,它都会显示相同的姓名和电话
标签: java android android-contacts