我在Android中有一个关于Uri的问题,我正在关注一些来自朋友的代码,其中我发起了从用户那里选择联系人的意图,然后使用onActivityResult
方法管理结果。
一切看起来都不错,我可以使用Uri作为第一个参数,通过查询访问联系信息。问题是试图存储该Uri以便稍后访问用户信息(在另一次执行应用程序时)。我尝试将Uri作为字符串存储,toString()
和getEncodedPath()
返回一个看似有效的Uri但是当我尝试执行相同的代码来检索传递它的Uri解析的名称时,它返回null。 / p>
我知道一个事实,因为我之前检索过这个名字并不是空的,但我不知道我做错了什么。谢谢!
在onActivityResult 中检索名称的代码(有效):
Uri contactData = data.getData();
Cursor lookupCursor = this.getContentResolver().query(contactData, null, null, null, null);
if (lookupCursor.moveToFirst()) {
String lookupKey = lookupCursor.getString(lookupCursor.getColumnIndexOrThrow(android.provider.ContactsContract.PhoneLookup.LOOKUP_KEY));
lookupCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY + " LIKE '" + lookupKey + "'", null, null);
if (lookupCursor.moveToFirst()) {
int nameIdx = lookupCursor.getColumnIndex(Phone.DISPLAY_NAME);
String name = lookupCursor.getString(nameIdx);
}
}
在其他地方我正在执行相同的代码片段,虽然来自自定义类但是传递上下文以检索contentResolver。但是,即使复制联系人选择意图返回的确切字符串,对Uri
的解析方法的调用也会返回null
。
我很茫然:(