Android ManagedQuery () IllegalArgumentException при открытии возвращаемого пути URI к одному контакту

У меня возникли проблемы с учебным приложением от Professional Android 2 Application Development. Я разрабатываю для Android 2.3, и кажется, что код немного изменился в версиях.

В основном у меня есть два действия, одно из которых запускает другое, чтобы получить список контактов, а затем вернуть выбранный контакт обратно к первому действию, которое затем отобразит его на экране, я знаю, что у Android есть что-то, что уже делает это, но я пытаюсь учиться здесь :p

Вся связь между действиями обрабатывается с помощью намерений. Первое действие запускает другое действие нормально, я могу выбрать контакт, и он возвращает его к первому действию. Работает onReturnActivity() нормально. Но когда я пытаюсь создать курсор (используя 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 или с записью, возвращенной из другого действия, ничего не содержащее. Но я больше склоняюсь к тому, что первое.

Все разрешения установлены, и я могу получить доступ к базе данных контактов в другом действии.

Был бы очень признателен за помощь в этом, я застрял в течение последних 2 дней: /

РЕДАКТИРОВАТЬ

Здесь вызывается вторая активность:

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 ;

И здесь я вызываю manageQuery() в первый раз (где это работает):

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

Вот активность onReturn:

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

person indigoOrange    schedule 17.01.2012    source источник
comment
Можете ли вы опубликовать фрагменты кода о том, как вы вызываете второе действие, метод onReturnActivity(), а также код управляемого запроса.   -  person robertly    schedule 17.01.2012
comment
Опубликовано выше как редактирование.   -  person indigoOrange    schedule 18.01.2012


Ответы (1)


Я почти уверен, что URI плохой. Я почти уверен, что перед числом 15 должна быть косая черта, например: content://com.android.contacts/contacts/15. В настоящее время я не могу проверить это для вас. Я больше ничего не могу различить в коде; извините, но если вы разберетесь с этой частью, я думаю, вы решите проблему. Вероятно, ваше второе действие возвращает URI. Надеюсь это поможет.

person robertly    schedule 18.01.2012
comment
Это сработало! Так долго застрял на такой простой проблеме, это моя неопытность для вас.. Спасибо миллион за вашу помощь :) - person indigoOrange; 18.01.2012
comment
Рад, что смог помочь. Удачи! - person robertly; 18.01.2012