¿Qué es un "paquete" en una aplicación de Android?


Respuestas:


279

Los paquetes se usan generalmente para pasar datos entre varias actividades de Android. Depende de usted qué tipo de valores desea pasar, pero los paquetes pueden contener todo tipo de valores y pasarlos a la nueva actividad.

Puedes usarlo así:

Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);  
startActivity(intent);

Puede obtener los valores pasados ​​haciendo:

Bundle extras = intent.getExtras(); 
String tmp = extras.getString("myKey");

Puedes encontrar más información en:


3
¿por qué no usar directamente System.object y cast?
lovespring

79

Pase datos entre actividades utilizando Bundley Intentobjetos.


Tu primero crea un Bundleobjeto

Bundle b = new Bundle();

Luego, asocie los datos de cadena almacenados anystringcon la clave de paquete"myname"

b.putString("myname", anystring);

Ahora, crea un Intentobjeto

Intent in = new Intent(getApplicationContext(), secondActivity.class);

Pasar objeto de paquete ba la intención

in.putExtras(b);

y comenzar la segunda actividad

startActivity(in);

En la segunda actividad, tenemos que acceder a los datos pasados ​​de la primera actividad.

Intent in = getIntent();

Ahora, necesita obtener los datos del paquete

Bundle b = in.getExtras();

Finalmente, obtenga el valor de los datos de cadena asociados con la clave denominada "myname"

String s = b.getString("myname");

ESTO ES REALMENTE BUENA RESPUESTA VERBOSA, GRACIAS POR ESO.
Abhishek Garg

68

Tengo que agregar que los paquetes son utilizados por actividades para pasar datos a sí mismos en el futuro.

Cuando la pantalla gira, o cuando se inicia otra actividad, protected void onSaveInstanceState(Bundle outState)se invoca el método y se destruye la actividad. Más tarde, se crea otra instancia de la actividad ypublic void onCreate(Bundle savedInstanceState) se llama. Cuando se crea la primera instancia de actividad, el paquete es nulo; y si el paquete no es nulo, la actividad continúa algunos negocios iniciados por su predecesor.

Android guarda automáticamente el texto en los campos de texto, pero no guarda todo, y a veces aparecen errores sutiles.

Sin embargo, el antipatrón más común es asumir que onCreate()solo hace la inicialización. Está mal, porque también debe restaurar el estado.

Hay una opción para deshabilitar este comportamiento de "recrear actividad en rotación", pero no evitará errores relacionados con el reinicio, solo los hará más difíciles de mencionar.

Tenga en cuenta también que el único método cuya llamada está garantizada cuando la actividad se va a destruir es onPause(). (Consulte el gráfico del ciclo de vida de la actividad en los documentos).


¿Por qué usar un paquete si solo podemos usar un mapeo? Gracias Ted!
Ruchir Baronia

44
Bundle no solo es usado por Activity. Fragment también lo utiliza para preservar estados después de la rotación.
Kai Wang

48

A Bundlees muy parecido a un Mapobjeto Java que asigna Stringclaves a valores. Se utiliza para pasar información entre actividades y otros componentes de la aplicación. El marco también lo utiliza para capturar y restaurar información de estado.

La razón por la que Android no usa Mapobjetos viejos para esto es que Mapes demasiado flexible; puede contener objetos (como, por ejemplo, flujos de E / S) que no se pueden serializar. La BundleAPI restringe los tipos de objetos que se pueden agregar a un paquete de tal manera que se garantiza que el contenido del paquete sea serializable. El marco de Android se basa en esta propiedad.

Le sugiero que lea la documentación sobre los fundamentos de la aplicación . Esto explica, entre otras cosas, qué son los paquetes y las intenciones y para qué se utilizan.


14

Los paquetes se pueden usar para enviar datos arbitrarios de una actividad a otra a través de Intentos. Cuando difunde una intención, las actividades interesadas (y otros BroadcastRecievers) recibirán una notificación al respecto. Una intención puede contener un paquete para que pueda enviar datos adicionales junto con la intención.

Los paquetes son asignaciones de valores clave, por lo que en cierto modo son como un Hash, pero no están estrictamente limitados a una sola asignación de objetos String / Foo. Tenga en cuenta que solo ciertos tipos de datos se consideran "Parcelable" y se especifican explícitamente en la API de paquete.


Esta es la única respuesta hasta ahora para abordar realmente la pregunta del OP, es decir, qué es un paquete. stackoverflow.com/a/6236801/1588163 ofrece más información.
clapas

¿Por qué usar un paquete si solo podemos usar un mapeo? ¡Gracias!
Ruchir Baronia

@RuchirBaronia no hay ninguna razón especial para usar un paquete a menos que tenga la intención de pasarlo a una parte de la API de Android que requiere objetos de paquete.
scriptocalypse

8

Solo crea un paquete,


Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);

EN el "this_is_the_next_class.class"

Puede recuperar los elementos como este.

Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);

5

Bundle se usa para pasar datos entre actividades. Puede crear un paquete, pasarlo a Intent que inicia la actividad que luego se puede usar desde la actividad de destino.


3

Paquete: - Una asignación de valores de cadena a varios tipos de paquetes.

Bundle se usa generalmente para pasar datos entre varias actividades de Android.

cuando llamamos a onPause () luego onStop () y luego en orden inverso onStop () a onPause ().

Los datos guardados que el sistema usa para restaurar el estado anterior se denominan "estado de instancia" y son una colección de pares clave-valor almacenados en un objeto Bundle.


Un mapeo, es la naturaleza del paquete.
BollMose

2

el paquete se usa para compartir datos entre actividades y para guardar el estado de la aplicación en el método oncreate () para que la aplicación sepa dónde se detuvo ... Espero que ayude :)


0

uso de paquete de envío de datos de una actividad a otra actividad con la ayuda del objeto de intención; El paquete contiene los datos que pueden ser de cualquier tipo.

Ahora les digo cómo crear paquetes de datos de paso entre dos actividades.

Paso 1: en la primera actividad

Bundle b=new Bundle();

b.putString("mkv",anystring);

Intent in=new Intent(getApplicationContext(),secondActivity.class);

in.putExtras(b);

startActivity(in);

Paso 2: en la segunda actividad

Intent in=getIntent();

Bundle b=in.getExtras();

String s=b.getString("mkv");

Creo que esto es útil para ti ...........


0

Bundle no es solo para transferir datos entre dos componentes diferentes, sino más importante, se usa para restaurar los valores almacenados antes de que la actividad se destruya en una nueva actividad.

como el texto en un EditTextwidget o la posición de desplazamiento de a ListView.


0

Primera actividad:

String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());

Segunda actividad:

String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");

1
También es posible que desee aprender sobre ejemplos mínimos, completos y verificables .
Daniel Corzo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.