【发布时间】:2021-10-27 21:59:45
【问题描述】:
在请求访问联系人的权限时,只要用户按“是”按钮,就会产生以下错误消息。
java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=131074, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.example.criminalintent/com.example.criminalintent.CrimePagerActivity}: java.lang.IllegalArgumentException: the bind value at index 1 is null
com.example.criminalintent.CrimeFragment.getSuspectPhoneNumber(CrimeFragment.java:302)
at com.example.criminalintent.CrimeFragment.updateSuspectNumber(CrimeFragment.java:322) at com.example.criminalintent.CrimeFragment.onRequestPermissionsResult(CrimeFragment.java:337)
302行是查询可疑电话号码。我从联系人 ID 中获取电话号码的代码如下。
private String getSuspectPhoneNumber(String contactId){
String suspectPhoneNumber=null;
Uri phoneContactUri= ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
//returns columns
String[] queryFields= new String[] {
ContactsContract.Data.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.TYPE};
//Selection criteria (where clause)
String mSelectionClause= ContactsContract.Data.CONTACT_ID + "=?";
//Selection criteria (where args)
String mSelectionArgs[] ={ contactId };
//Does query and returns cursor object
//line 302
Cursor c= getActivity().getContentResolver().
query(phoneContactUri,queryFields,mSelectionClause,mSelectionArgs,null);
try {
if (c.getCount() == 0) {
return null;
}
c.moveToNext();
int phoneType=c.getInt(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
if (phoneType==ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) {
suspectPhoneNumber=c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
}finally {
c.close(); }
return suspectPhoneNumber;}
以下代码是 onActivityResults 方法的一部分,用于获取联系人/嫌疑人姓名及其电话号码的权限。
} else if (requestCode == REQUEST_CONTACT && data != null){
String suspectName=getCrimeSuspect(data);
mCrime.setSuspect(suspectName);
mSuspectButton.setText(suspectName);
if (hasContactsPermission()){
updateSuspectNumber(); }
else{
requestPermissions(CONTACTS_PERMISSIONS,REQUEST_CONTACTS_PERMISSIONS);
}
【问题讨论】:
-
请添加 onActivityResult() 代码。会有问题的。
-
嗨,我已经添加了 onActivityResult 方法,如上所示。我认为我的问题是我不确定如何使用联系人 ID 变量来提取电话号码。我的联系人 ID 变量在另一种方法中初始化,仅提取联系人姓名和 ID。但是,getSuspectNumber 方法中的联系人 id 变量为 null。
-
那么,您在 getSuspectNumber 中得到了 null?
标签: java android android-studio android-contacts