Android ManagedQuery () IllegalArgumentException all'apertura del percorso Uri restituito a un singolo contatto

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

Domanda

Ho problemi con un'applicazione di tutorial dallo sviluppo di applicazioni Android 2 professionale. Sto sviluppando per Android 2.3 e sembra che il codice sia cambiato un po 'nelle revisioni.

Fondamentalmente ho due attività, una che lancia l'altra, per ottenere un elenco di contatti e quindi per restituire il contatto scelto alla prima attività che lo mostrerà sullo schermo, so che Android ha qualcosa che lo fa già, ma io 'Sto cercando di imparare qui: P

Tutta la comunicazione tra le attività viene gestita utilizzando gli intenti. La prima attività avvia l'altra attività, posso scegliere un contatto e la restituisce alla prima attività. Corre onReturnActivity() tutto bene. Ma quando provo a creare un cursore (usando managedQuery()) in onReturnActivity() Per aprire la voce del database dei contatti restituiti a restituzione, tutto diventa pearhaped e ottengo un IlegalArgumentException.

Questo percorso Uri restituito è: contenuto: //com.android.contacts/contacts15 (o un altro numero).

L'errore è:

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

Creare il cursore nell'altra attività funziona bene, quindi le uniche cose che posso pensare (con la mia conoscenza molto limitata di Android) è che è un problema con il percorso URI o con la voce restituita dall'altra attività non contenente nulla. Ma sono più propenso a credere che sia il primo.

Tutte le autorizzazioni impostate e posso accedere al database dei contatti nell'altra attività.

Apprezzerei davvero un po 'di aiuto su questo, sono rimasto bloccato negli ultimi 2 giorni:/

MODIFICARE

Ecco la seconda attività:

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

In realtà non uso l'URI che passo a questo intento, però, l'ho codificato nella seconda attività come questa:

final Uri data = ContactsContract.Contacts.CONTENT_URI ;

Ed ecco dove chiamo managedQuery () la prima volta (dove funziona):

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

Ecco l'attività di OnReturn: public void onActivityResult (int reqCode, intolSode, Intent Data) {Super.OnActivityResult (reqcode, Rescone, dati);

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

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top