Pregunta

Tengo problemas con una aplicación tutorial del desarrollo profesional de aplicaciones de Android 2. Estoy desarrollando para Android 2.3, y parece que el código ha cambiado mucho en las revisiones.

Básicamente, tengo dos actividades, una que lanza la otra, para obtener una lista de contactos y luego para devolver el contacto elegido a la primera actividad que luego lo mostrará en la pantalla, sé que Android tiene algo que ya hace esto, pero yo. Estoy tratando de aprender aquí: P

Toda la comunicación entre las actividades se maneja utilizando intentos. La primera actividad inicia la otra actividad bien, puedo elegir un contacto y lo devuelve a la primera actividad. Corre onReturnActivity() todo muy bien. Pero cuando trato de crear un cursor (usando managedQuery()) en onReturnActivity() Para abrir la entrada de la base de datos de contactos devueltos, todo va en forma de pera y obtengo una explicación ilegalargument.

Esa ruta URI devuelta es: content: //com.android.contacts/contacts15 (u otro número).

El error es:

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

Sin embargo, crear el cursor en la otra actividad funciona bien, por lo que las únicas cosas que puedo pensar (con mi conocimiento muy limitado de Android) es que es un problema con la ruta URI o con la entrada devuelta de la otra actividad que no contiene nada. Pero estoy más inclinado a creer que es el primero.

Todos los permisos se establecen y puedo acceder a la base de datos de contactos en la otra actividad de actividad.

Realmente apreciaría algo de ayuda en esto, he estado atrapado durante los últimos 2 días:/

EDITAR

Aquí está llamando a la segunda actividad:

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

Sin embargo, en realidad no uso el URI que paso a esta intención, lo tengo codificado en la segunda actividad como esta:

final Uri data = ContactsContract.Contacts.CONTENT_URI ;

Y aquí es donde llamo ManagedQuery () la primera vez (donde funciona):

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

Aquí está la actividad de 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 ;
     }
 }

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top