Android ManagedQuery () IllegalArgumentException all'apertura del percorso Uri restituito a un singolo contatto
-
29-10-2019 - |
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