¿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:

samtherock
fuente
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");
mahalakshmi
fuente
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).

18446744073709551615
fuente
¿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.

Ted Hopp
fuente
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.

scriptocalypse
fuente
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);
Bala Prasanna
fuente
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.

GSree
fuente
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.

Ahmed Ali
fuente
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 :)

Sandip Lawate
fuente
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 ...........

Mahendra Kumar Verma
fuente
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.

Ajay Takur
fuente
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");
cobre
fuente
1
También es posible que desee aprender sobre ejemplos mínimos, completos y verificables .
Daniel Corzo