0

我有一个关于 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

我很茫然:(

4

0 回答 0