1

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

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

活动之间的所有通信都使用意图处理。第一个活动很好地启动了另一个活动,我可以选择一个联系人并将其返回到第一个活动。它运行onReturnActivity()良好。但是当我尝试在其中创建一个游标(Using managedQuery()onReturnActivity()来打开单个返回的联系人数据库条目时,一切都变成了梨形,我得到了一个 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) ;
            }

不过,我实际上并没有使用传递给此 Intent 的 URI,而是将其硬编码到第二个活动中,如下所示:

final Uri data = ContactsContract.Contacts.CONTENT_URI ;

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

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

这是 onReturn 活动: public void onActivityResult(int reqCode, int resCode, Intent data) { 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 ;
     }
 }
4

1 回答 1

2

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

于 2012-01-18T17:11:43.383 回答