2011-06-24 13 views
30

Estoy teniendo muchísimo tiempo averiguando qué datos están llegando a mis métodos a través del Intent/Bundle s. Intenté agregar puntos de interrupción para inspeccionar los datos, pero no veo nada. Quizás porque es Parcelable no puedo leerlo manualmente en Eclipse.¿Cómo puedo saber qué datos se proporcionan en un paquete?

Por ejemplo, un onActivityResult(int requestCode, int resultCode, Intent data) para un Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI). ¿Cómo sé qué datos hay disponibles? Aviso, no me preguntan QUÉ datos están disponibles, pero ¿cómo diablos lo averiguo para poder aplicar la misma idea a cualquier Bundle/Intent desde el marco de Android? Quizás es tan simple como mirar los documentos, pero no veo una lista completa de los datos y no puedo verlos en Eclipse. Entonces estoy perdido.

Respuesta

64

Bundle.keySet() le da una lista de todas las claves del paquete. Dicho esto, normalmente esperas ciertas claves y las consultas, pero keySet() es útil para examinar los paquetes que obtienes de algún lado.

+0

gracias. ¿Cómo sé que esperar es la pregunta? Ahora veo documentación sobre eso, ¿verdad? – user123321

+0

Un paquete es realmente solo un contenedor. Depende completamente de la aplicación que lo haya empaquetado. Si es tuyo, entonces es obvio: es lo que sea que ingreses. Si es de otra persona (o del sistema operativo), depende de la aplicación de dicha aplicación. Opción 1: consulta la documentación. Opción 2: Preguntar al desarrollador de la aplicación. Opción 3: use Bundle.keySet() para analizar un paquete entrante. – EboMike

+0

** ¿DÓNDE ** se inició la documentación del material en un paquete para ContactsContract.Contacts.CONTENT_URI con un startActivityForResult? – user123321

0

Lo único que obtienes de un paquete es lo que pones. Los paquetes son formas de pasar información entre actividades. Si estás a cargo de toda tu aplicación, no deberías necesitar mirar dentro del paquete por tus objetos, solo debes agarrarlos. Piensa en claves hashmap ... si no conoces la clave, no es como si pudieras buscar el hashmap.

Para colocar un elemento en un paquete y pasarlo a la siguiente actividad, debe colocarlo como un extra. Eche un vistazo a here para ver un ejemplo de cómo pasar datos a través de extras y paquetes entre actividades.

copiado y pegado a continuación:

De Actividad1

Intent intent = new Intent(this,myActivity2.class); 
Bundle bundle = new Bundle(); 
bundle.putString(“myValue“, myValue); 
intent.putExtras(bundle); 
navigation.this.startActivity(intent); 

En Actividad2

Bundle bundle = getIntent().getExtras(); 
act2MyValue= bundle.getString(“myValue“); 
39
public static String bundle2string(Bundle bundle) { 
    if (bundle == null) { 
     return null; 
    } 
    String string = "Bundle{"; 
    for (String key : bundle.keySet()) { 
     string += " " + key + " => " + bundle.get(key) + ";"; 
    } 
    string += " }Bundle"; 
    return string; 
} 
+5

Chicos como tú son la razón por la que soy tan activa en SO, dándonos café preparado: P Gracias – khandelwaldeval

2

i conseguir felizmente clave y el valor del paquete almacenado ...

for (String key : bundle.keySet()) { 
    string += " " + key + " => " + bundle.get(key) + ";"; 
} 

de salida:

(key)  :(value)  
profile_name:abc 
Cuestiones relacionadas