Android ManagedQuery () IllégalArgumentException lors de l'ouverture du chemin URI renvoyé vers un seul contact

StackOverflow https://stackoverflow.com/questions/8898225

Question

J'ai des problèmes avec une application de tutoriel du développement d'applications Android 2 professionnel. Je développe pour Android 2.3, et il semble que le code a beaucoup changé dans les révisions.

Fondamentalement, j'ai deux activités, l'une qui lance l'autre, pour obtenir une liste de contacts, puis pour retourner le contact choisi à la première activité qui l'affichera ensuite à l'écran, je sais qu'Android a déjà quelque chose qui fait cela, mais je 'J'essaie d'apprendre ici: P

Toutes les communications entre les activités sont gérées à l'aide d'intentions. La première activité démarre bien l'autre activité, je peux choisir un contact et il le renvoie à la première activité. Ça fonctionne onReturnActivity() Tout va bien. Mais quand j'essaie de créer un curseur (en utilisant managedQuery()) dans onReturnActivity() Pour ouvrir l'entrée de base de données de contacts renvoyés unique, tout devient en forme de poignée et je reçois une conception illégalargumental.

Ce chemin URI renvoyé est: Content: //com.android.contsacts/contacts15 (ou un autre numéro).

L'erreur est:

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

La création du curseur dans l'autre activité fonctionne bien, donc les seules choses que je peux penser (avec ma connaissance très limitée d'Android) est que c'est un problème avec le chemin URI ou avec l'entrée retournée de l'autre activité sans rien contenir. Mais je suis plus enclin à croire que c'est le premier.

Tous les autorisations définies et je peux accéder à la base de données des contacts dans l'autre activité.

J'apprécierais vraiment de l'aide à ce sujet, je suis coincé depuis 2 jours: / /

ÉDITER

Voici l'appel de la deuxième activité:

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

Je n'utilise pas vraiment l'URI que je passe dans cette intention, je l'ai codé en dur dans la deuxième activité comme ceci:

final Uri data = ContactsContract.Contacts.CONTENT_URI ;

Et voici où j'appelle ManagedQuery () la première fois (où cela fonctionne):

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

Voici l'activité OnReturn: public void onactivityResult (int reqcode, int resccode, data intention) {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 ;
     }
 }

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top