打开时Android managedQuery()IllegalArgumentException返回单个联系人的URI路径

打开时Android managedQuery()IllegalArgumentException返回单个联系人的URI路径,android,path,uri,contact,illegalargumentexception,Android,Path,Uri,Contact,Illegalargumentexception,我在专业Android 2应用程序开发的教程应用程序方面遇到了问题。我正在为Android2.3开发,看起来代码在修订版中有了很大的变化 基本上,我有两个活动,一个启动另一个,获取联系人列表,然后将选择的联系人返回到第一个活动,然后在屏幕上显示。我知道android已经有了这样的功能,但我在这里尝试学习:p 活动之间的所有通信都使用意图进行处理。第一个活动启动另一个活动很好,我可以选择一个联系人,它将其返回到第一个活动。它运行onReturnActivity()一切正常。但是,当我尝试在onRe

我在专业Android 2应用程序开发的教程应用程序方面遇到了问题。我正在为Android2.3开发,看起来代码在修订版中有了很大的变化

基本上,我有两个活动,一个启动另一个,获取联系人列表,然后将选择的联系人返回到第一个活动,然后在屏幕上显示。我知道android已经有了这样的功能,但我在这里尝试学习:p

活动之间的所有通信都使用意图进行处理。第一个活动启动另一个活动很好,我可以选择一个联系人,它将其返回到第一个活动。它运行
onReturnActivity()
一切正常。但是,当我尝试在
onReturnActivity()
中创建一个游标(使用
managedQuery()
)来打开单个返回的联系人数据库条目时,一切都变得异常,我得到了一个IllegalArgumentException

返回的URI路径为:content://com.android.contacts/contacts15 (或其他号码)

错误是:

java.lang.RuntimeException: Failure delivering result ResultInfo { 
            who=null, request=1, result=-1, data=Intent { 
            dat=content://com.android.contacts/contacts15 }} 
 to activity {com.paad.contactPicker/com.paad.contactPicker.ContactPickerTester}:
 java.lang.IllegalArgumentException:
    URI: content://com.android.contacts/contacts15, 
    calling user: com.paad.contactPicker, 
    calling package:com.paad.contactPicker
不过,在其他活动中创建游标可以正常工作,因此我唯一能想到的是(我对Android的了解非常有限)uri路径或从其他活动返回的条目不包含任何内容有问题。但我更倾向于相信这是第一次

设置了所有权限,我可以在其他活动中访问联系人数据库

非常感谢您在这方面的帮助,我已经被困了两天:/

编辑

下面是第二个活动:

public void onClick(View _view) {
                Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://android.provider.ContactsContract")) ;
                startActivityForResult(intent, PICK_CONTACT) ;
            }
我实际上并没有使用我传递的URI,而是将其硬编码到第二个活动中,如下所示:

final Uri data = ContactsContract.Contacts.CONTENT_URI ;
这里是我第一次调用managedQuery()的地方(它在这里工作):

以下是onReturn活动: ActivityResult上的公共无效(输入请求代码、输入重新编码、意图数据){ super.onActivityResult(请求代码、重新编码、数据)


我几乎可以肯定URI是坏的。我非常确定在数字15之前应该有一个斜杠,如下所示:content://com.android.contacts/contacts/15. 不过,我目前无法为您测试它。我无法从代码中分辨出更多其他内容;抱歉,但如果您能够理解这一部分,我认为您将解决问题。这可能是您的第二个活动正在返回URI。希望这能有所帮助。

能否发布关于如何调用第二个活动onReturnActivity()的代码片段方法,以及您的managedQuery代码。作为编辑发布在上面。它起作用了!在这样一个简单的问题上坚持了这么久,这是我对您的经验不足。。非常感谢您的帮助:)很高兴我能帮上忙。祝您好运!
 final Cursor c = managedQuery(data, null, null, null, null) ;
     switch(reqCode) {
        case(PICK_CONTACT) : {
            if(resCode == Activity.RESULT_OK) {
                Uri contactData = data.getData() ;
                Cursor c = managedQuery(contactData, null, null, null, null) ;
                c.moveToFirst() ;
                String name = c.getString(c.getColumnIndexOrThrow("DISPLAY_NAME")) ;
                TextView tv = (TextView)findViewById(R.id.textView2) ;
                tv.setText(name) ;
            }
        }
        break ;
     }
 }