【发布时间】:2021-11-21 16:38:45
【问题描述】:
我正在尝试使用 Kotlin 获取有关用户可以在联系人列表中选择的联系人的一些信息。我尝试了一些仅部分有效的教程。这是应该从MainActivity.kt调用startActivityForResult()的代码:
add_contact.setOnClickListener {
val intent = Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI)
startActivityForResult(intent, CONTACT_PICK_CODE)
}
以下是被覆盖的onActivityResult方法:
@SuppressLint("Range")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// handle intent results || calls when user from Intent (Contact Pick) picks or cancels pick contact
if (resultCode == RESULT_OK) {
if (requestCode == CONTACT_PICK_CODE) {
val cursor1: Cursor
val cursor2: Cursor?
// get data from intent
val uri = data!!.data
cursor1 = contentResolver.query(uri!!, null, null, null, null)!!
if (cursor1.moveToFirst()) {
// get contact details
val contactId = cursor1.getString(cursor1.getColumnIndex(ContactsContract.Contacts._ID))
val contactName = cursor1.getString(cursor1.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))
val contactThumbnail = cursor1.getString(cursor1.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI))
val idResults = cursor1.getString(cursor1.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))
val idResultHold = idResults.toInt()
// check if contact has a phone number or not
if (idResultHold == 1) {
cursor2 = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId,
null,
null
)
// a contact may have multiple phone numbers
var contactNumber : String = ""
while (cursor2!!.moveToNext()) {
// get phone number
contactNumber = cursor2.getString(cursor2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
}
Toast.makeText(this, "Contact number: $contactNumber", Toast.LENGTH_SHORT).show()
cursor2.close()
}
cursor1.close()
}
}
} else {
Toast.makeText(this, "Cancelled", Toast.LENGTH_SHORT).show()
}
}
打印“Contact number: ...”的行从不打印联系电话,这意味着while 循环永远不会运行。
所有其他变量(contactId、contactName...)似乎每次都被分配了正确的值,但数字却没有。有谁知道是什么原因造成的?
【问题讨论】: