gpt4 book ai didi

Android managedQuery() IllegalArgumentException on opening returned URI path to a single contact

转载 作者:行者123 更新时间:2023-11-29 22:14:05 24 4
gpt4 key购买 nike

我在使用 Professional Android 2 Application Development 中的教程应用程序时遇到问题。我正在为 android 2.3 开发,看起来代码在修订中发生了很大的变化。

基本上我有两个 Activity ,一个启动另一个,以获取联系人列表,然后将选择的联系人返回到第一个 Activity ,然后将其显示在屏幕上,我知道 android 已经有一些东西可以做到这一点, 但我正在尝试在这里学习 :p

Activity 之间的所有通信都是使用 Intent 处理的。第一个 Activity 可以很好地启动另一个 Activity ,我可以选择一个联系人并将其返回到第一个 Activity 。它运行 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

虽然在其他 Activity 中创建光标没问题,所以我唯一能想到的(以我对 Android 的非常有限的了解)是 uri 路径或从其他 Activity 返回的条目不包含的问题任何事物。但我更倾向于相信它是第一个。

设置了所有权限,我可以正常访问其他 Activity 中的联系人数据库。

非常感谢这方面的帮助,过去 2 天我一直被困住了:/

编辑

这里调用第二个 Activity :

public void onClick(View _view) {
Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://android.provider.ContactsContract")) ;
startActivityForResult(intent, PICK_CONTACT) ;
}

虽然我实际上并没有使用传递给此 Intent 的 URI,但我已将其硬编码到第二个 Activity 中,如下所示:

final Uri data = ContactsContract.Contacts.CONTENT_URI ;

这是我第一次调用 managedQuery() 的地方(它起作用的地方):

 final Cursor c = managedQuery(data, null, null, null, null) ;

这是 onReturn Activity : public void onActivityResult(int reqCode, int resCode, Intent 数据) { super.onActivityResult(reqCode, resCode, data) ;

     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 ;
}
}

最佳答案

我几乎可以肯定 URI 是错误的。我很确定数字 15 之前应该有一个斜杠,如下所示:content://com.android.contacts/contacts/15。不过,我目前无法为您测试。我无法从代码中辨别出其他东西;抱歉,但如果你能弄清楚这部分,我想你会解决问题。这可能是您的第二个 Activity 返回 URI 的方式。希望这会有所帮助。

关于Android managedQuery() IllegalArgumentException on opening returned URI path to a single contact,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8898225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com