我有一个关于 Android 中的 Uri 的问题,我正在关注一位朋友的一些代码,我在其中启动了一个从用户那里选择联系人的意图,然后使用该onActivityResult
方法管理结果。
一切看起来都不错,我可以通过使用 Uri 作为第一个参数的查询来访问联系信息。问题是试图存储该 Uri 以便稍后访问用户信息(在应用程序的另一次执行中)。我尝试将 Uri 存储为字符串,toString()
并getEncodedPath()
返回一个看似有效的 Uri,但是当我尝试执行相同的代码来检索传递它解析的 Uri 的名称时,它返回 null。
我知道它不是空的,因为我之前检索了这个名字,但我不知道我做错了什么。谢谢!
在 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
,对 parse 方法的调用也会返回。null
我很茫然:(