una - ¿Cómo paso datos entre Actividades en la aplicación de Android?
putextra android para que sirve (30)
Respuesta suplementaria: Convenciones de nomenclatura para la cadena de clave
El proceso real de pasar datos ya ha sido respondido, sin embargo, la mayoría de las respuestas utilizan cadenas codificadas para el nombre de clave en la Intención. Esto usualmente está bien cuando se usa solo dentro de su aplicación. Sin embargo, la documentación recomienda usar las constantes EXTRA_*
para los tipos de datos estandarizados.
Ejemplo 1: Uso de las teclas Intent.EXTRA_*
Primera actividad
Intent intent = new Intent(getActivity(), SecondActivity.class);
intent.putExtra(Intent.EXTRA_TEXT, "my text");
startActivity(intent);
Segunda actividad:
Intent intent = getIntent();
String myText = intent.getExtras().getString(Intent.EXTRA_TEXT);
Ejemplo 2: Definiendo tu propia clave static final
Si una de las Intent.EXTRA_*
no se ajusta a sus necesidades, puede definir la suya al comienzo de la primera actividad.
static final String EXTRA_STUFF = "com.myPackageName.EXTRA_STUFF";
Incluir el nombre del paquete es solo una convención si solo está usando la clave en su propia aplicación. Pero es una necesidad para evitar conflictos de nombres si está creando algún tipo de servicio al que otras aplicaciones pueden llamar con una intención.
Primera actividad:
Intent intent = new Intent(getActivity(), SecondActivity.class);
intent.putExtra(EXTRA_STUFF, "my text");
startActivity(intent);
Segunda actividad:
Intent intent = getIntent();
String myText = intent.getExtras().getString(FirstActivity.EXTRA_STUFF);
Ejemplo 3: Uso de una clave de recurso de cadena
Aunque no se menciona en la documentación, esta respuesta recomienda utilizar un recurso de String para evitar dependencias entre actividades.
strings.xml
<string name="EXTRA_STUFF">com.myPackageName.MY_NAME</string>
Primera actividad
Intent intent = new Intent(getActivity(), SecondActivity.class);
intent.putExtra(getString(R.string.EXTRA_STUFF), "my text");
startActivity(intent);
Segunda actividad
Intent intent = getIntent();
String myText = intent.getExtras().getString(getString(R.string.EXTRA_STUFF));
Tengo un escenario donde, después de iniciar sesión a través de una página de inicio de sesión, habrá un button
cierre de sesión en cada activity
.
Al hacer clic en sign-out
, pasaré el session id
de session id
del usuario que inició sesión para cerrar sesión. ¿Alguien me puede guiar sobre cómo mantener el session id
disponible para todas las activities
?
Cualquier alternativa a este caso
Charlie Collins me dio una answer perfecta usando Application.class
. No sabía que pudiéramos subclasificar tan fácilmente. Aquí hay un ejemplo simplificado usando una clase de aplicación personalizada.
AndroidManifest.xml
Dé el atributo android:name
para usar su propia clase de aplicación.
...
<application android:name="MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
....
MyApplication.java
Utilice esto como un titular de referencia global. Funciona bien dentro de un mismo proceso.
public class MyApplication extends Application {
private MainActivity mainActivity;
@Override
public void onCreate() {
super.onCreate();
}
public void setMainActivity(MainActivity activity) { this.mainActivity=activity; }
public MainActivity getMainActivity() { return mainActivity; }
}
MainActivity.java
Establezca la referencia global "singleton" a la instancia de la aplicación.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((MyApplication)getApplication()).setMainActivity(this);
}
...
}
MyPreferences.java
Un ejemplo simple donde uso una actividad principal de otra instancia de actividad.
public class MyPreferences extends PreferenceActivity
implements SharedPreferences.OnSharedPreferenceChangeListener {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (!key.equals("autostart")) {
((MyApplication)getApplication()).getMainActivity().refreshUI();
}
}
}
Clase de fuente:
Intent myIntent = new Intent(this, NewActivity.class);
myIntent.putExtra("firstName", "Your First Name Here");
myIntent.putExtra("lastName", "Your Last Name Here");
startActivity(myIntent)
Clase de destino (clase NewActivity):
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view);
Intent intent = getIntent();
String fName = intent.getStringExtra("firstName");
String lName = intent.getStringExtra("lastName");
}
El enfoque estándar.
Intent i = new Intent(this, ActivityTwo.class);
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
String getrec=textView.getText().toString();
Bundle bundle = new Bundle();
bundle.putString(“stuff”, getrec);
i.putExtras(bundle);
startActivity(i);
Ahora en tu segunda actividad recupera tus datos del paquete:
Obtener el paquete
Bundle bundle = getIntent().getExtras();
Extraer los datos ...
String stuff = bundle.getString(“stuff”);
El paso de datos entre actividades es principalmente por medio de un objeto de intención.
Primero, debe adjuntar los datos al objeto de intento con el uso de la clase Bundle
. Luego, llame a la actividad usando los startActivity()
o startActivityForResult()
.
Puede encontrar más información al respecto, con un ejemplo de la publicación del blog Pasar datos a una actividad .
En tu Actividad actual, crea una nueva Intent
:
String value="Hello world";
Intent i = new Intent(CurrentActivity.this, NewActivity.class);
i.putExtra("key",value);
startActivity(i);
Luego, en la nueva Actividad, recupera esos valores:
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("key");
//The key argument here must match that used in the other activity
}
Usa esta técnica para pasar variables de una actividad a la otra.
Esta es mi mejor práctica y ayuda mucho cuando el proyecto es enorme y complejo.
Supongamos que tengo 2 actividades, LoginActivity
y LoginActivity
. Quiero pasar 2 parámetros (nombre de usuario y contraseña) de LoginActivity
a LoginActivity
.
Primero, creo mi HomeIntent
public class HomeIntent extends Intent {
private static final String ACTION_LOGIN = "action_login";
private static final String ACTION_LOGOUT = "action_logout";
private static final String ARG_USERNAME = "arg_username";
private static final String ARG_PASSWORD = "arg_password";
public HomeIntent(Context ctx, boolean isLogIn) {
this(ctx);
//set action type
setAction(isLogIn ? ACTION_LOGIN : ACTION_LOGOUT);
}
public HomeIntent(Context ctx) {
super(ctx, HomeActivity.class);
}
//This will be needed for receiving data
public HomeIntent(Intent intent) {
super(intent);
}
public void setData(String userName, String password) {
putExtra(ARG_USERNAME, userName);
putExtra(ARG_PASSWORD, password);
}
public String getUsername() {
return getStringExtra(ARG_USERNAME);
}
public String getPassword() {
return getStringExtra(ARG_PASSWORD);
}
//To separate the params is for which action, we should create action
public boolean isActionLogIn() {
return getAction().equals(ACTION_LOGIN);
}
public boolean isActionLogOut() {
return getAction().equals(ACTION_LOGOUT);
}
}
Aquí es cómo paso los datos en mi LoginActivity
public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
String username = "phearum";
String password = "pwd1133";
final boolean isActionLogin = true;
//Passing data to HomeActivity
final HomeIntent homeIntent = new HomeIntent(this, isActionLogin);
homeIntent.setData(username, password);
startActivity(homeIntent);
}
}
Paso final, aquí es cómo recibo los datos en HomeActivity
public class HomeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//This is how we receive the data from LoginActivity
//Make sure you pass getIntent() to the HomeIntent constructor
final HomeIntent homeIntent = new HomeIntent(getIntent());
Log.d("HomeActivity", "Is action login? " + homeIntent.isActionLogIn());
Log.d("HomeActivity", "username: " + homeIntent.getUsername());
Log.d("HomeActivity", "password: " + homeIntent.getPassword());
}
}
¡Hecho! Genial :) Solo quiero compartir mi experiencia. Si estás trabajando en un proyecto pequeño, este no debería ser el gran problema. Pero cuando estás trabajando en un gran proyecto, realmente te duele cuando quieres refactorizar o corregir errores.
Iniciar otra actividad desde esta actividad. Pasar parámetros a través de Bundle Object.
Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("USER_NAME", "[email protected]");
startActivity(intent);
Recuperar en otra actividad (YourActivity)
String s = getIntent().getStringExtra("USER_NAME");
Esto está bien para el tipo de datos de tipo simple. Pero si desea pasar datos complejos entre la actividad, primero debe serializarlos.
Aquí tenemos modelo de empleado
class Employee{
private String empId;
private int age;
print Double salary;
getters...
setters...
}
Puede usar Gson lib proporcionado por google para serializar los datos complejos como este
String strEmp = new Gson().toJson(emp);
Intent intent = new Intent(getBaseContext(), YourActivity.class);
intent.putExtra("EMP", strEmp);
startActivity(intent);
Bundle bundle = getIntent().getExtras();
String empStr = bundle.getString("EMP");
Gson gson = new Gson();
Type type = new TypeToken<Employee>() {
}.getType();
Employee selectedEmp = gson.fromJson(empStr, type);
La forma más conveniente de pasar datos entre actividades es pasar intenciones. En la primera actividad desde la que desea enviar datos, debe agregar código,
String str = "My Data"; //Data you want to send
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("name",str); //Here you will add the data into intent to pass bw activites
v.getContext().startActivity(intent);
También deberías importar
import android.content.Intent;
Luego, en la siguiente actividad (SecondActivity), debe recuperar los datos de la intención utilizando el siguiente código.
String name = this.getIntent().getStringExtra("name");
La forma más fácil de hacer esto sería pasar el ID de sesión a la actividad de cierre de sesión en la Intent
que está utilizando para iniciar la actividad:
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);
Accede a esa intención en la siguiente actividad.
String sessionId= getIntent().getStringExtra("EXTRA_SESSION_ID");
La docs para intenciones tiene más información (consulte la sección titulada "Extras").
Me ayuda a ver las cosas en contexto. Aquí hay dos ejemplos.
Pasando los datos hacia adelante
Actividad principal
- Coloque los datos que desea enviar en un Intent con un par clave-valor. Vea esta respuesta para las convenciones de nomenclatura para la clave.
- Comience la segunda actividad con
startActivity
.
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// "Go to Second Activity" button click
public void onButtonClick(View view) {
// get the text to pass
EditText editText = (EditText) findViewById(R.id.editText);
String textToPass = editText.getText().toString();
// start the SecondActivity
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra(Intent.EXTRA_TEXT, textToPass);
startActivity(intent);
}
}
Segunda actividad
- Utiliza
getIntent()
para obtener laIntent
que inició la segunda actividad. Luego puede extraer los datos congetExtras()
y la clave que definió en la primera actividad. Como nuestros datos son una cadena, solo usaremosgetStringExtra
aquí.
SecondActivity.java
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
// get the text from MainActivity
Intent intent = getIntent();
String text = intent.getStringExtra(Intent.EXTRA_TEXT);
// use the text in a TextView
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(text);
}
}
Pasando datos de vuelta
Actividad principal
- Comience la segunda actividad con
startActivityForResult
, proporcionándole un código de resultado arbitrario. - Anular
onActivityResult
. Esto se llama cuando la segunda actividad termina. Puede asegurarse de que en realidad es la Segunda Actividad verificando el código de resultado. (Esto es útil cuando está iniciando varias actividades diferentes desde la misma actividad principal). - Extrae los datos que obtuviste de la
Intent
devolución. Los datos se extraen utilizando un par clave-valor. Podría usar cualquier cadena para la clave, peroIntent.EXTRA_TEXT
elIntent.EXTRA_TEXT
predefinido ya que estoy enviando texto.
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final int SECOND_ACTIVITY_REQUEST_CODE = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// "Go to Second Activity" button click
public void onButtonClick(View view) {
// Start the SecondActivity
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, SECOND_ACTIVITY_REQUEST_CODE);
}
// This method is called when the second activity finishes
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// check that it is the SecondActivity with an OK result
if (requestCode == SECOND_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// get String data from Intent
String returnString = data.getStringExtra(Intent.EXTRA_TEXT);
// set text view with string
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(returnString);
}
}
}
}
Segunda actividad
- Coloque los datos que desea enviar a la actividad anterior en una
Intent
. Los datos se almacenan en laIntent
utilizando un par clave-valor. Elegí usarIntent.EXTRA_TEXT
para mi clave. - Establezca el resultado en
RESULT_OK
y agregue la intención que contiene sus datos. - Llame a
finish()
para cerrar la segunda actividad.
SecondActivity.java
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
// "Send text back" button click
public void onButtonClick(View view) {
// get the text from the EditText
EditText editText = (EditText) findViewById(R.id.editText);
String stringToPassBack = editText.getText().toString();
// put the String to pass back into an Intent and close this activity
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_TEXT, stringToPassBack);
setResult(RESULT_OK, intent);
finish();
}
}
Otra forma es usar un campo estático público en el que almacena datos, es decir:
public class MyActivity extends Activity {
public static String SharedString;
public static SomeObject SharedObject;
//...
Pasar Intent extras es un buen enfoque como señaló Erich.
Sin embargo, el objeto Application es otra forma, y a veces es más fácil cuando se trata del mismo estado en múltiples actividades (en lugar de tener que ponerlo en cualquier lugar), u objetos más complejos que los primitivos y las Cadenas.
Puede extender la Aplicación, y luego configurar / obtener lo que quiera allí y acceder a ella desde cualquier Actividad (en la misma aplicación) con getApplication() .
También tenga en cuenta que otros enfoques que puede ver, como los estáticos, pueden ser problemáticos porque pueden provocar pérdidas de memoria . La aplicación ayuda a resolver esto también.
Prueba esto:
CurrentActivity.java
Intent intent = new Intent(currentActivity.this, TargetActivity.class);
intent.putExtra("booktype", "favourate");
startActivity(intent);
TargetActivity.java
Bundle b = getIntent().getExtras();
String typesofbook = b.getString("booktype");
Puede enviar datos entre actividades utilizando objeto de intención. FirstActivity
cuenta que tienes dos actividades: FirstActivity
y SecondActivity
.
Dentro de FirstActivity:
Usando la intención:
i = new Intent(FirstActivity.this,SecondActivity.class);
i.putExtra("key", value);
startActivity(i)
Dentro de la segunda actividad
Bundle bundle= getIntent().getExtras();
Ahora puede usar diferentes métodos de clase de paquete para obtener valores pasados desde FirstActivity by Key.
Por ejemplo, bundle.getString("key")
, bundle.getDouble("key")
, bundle.getInt("key")
etc.
Puede probar la Preferencia compartida, puede ser una buena alternativa para compartir datos entre las actividades
Para guardar ID de sesión -
SharedPreferences pref = myContexy.getSharedPreferences("Session
Data",MODE_PRIVATE);
SharedPreferences.Editor edit = pref.edit();
edit.putInt("Session ID", session_id);
edit.commit();
Para conseguirlos -
SharedPreferences pref = myContexy.getSharedPreferences("Session Data", MODE_PRIVATE);
session_id = pref.getInt("Session ID", 0);
Puedes usar Intent
Intent mIntent = new Intent(FirstActivity.this, SecondActivity.class);
mIntent.putExtra("data", data);
startActivity(mIntent);
Otra forma podría ser usando el patrón singleton también:
public class DataHolder {
private static DataHolder dataHolder;
private List<Model> dataList;
public void setDataList(List<Model>dataList) {
this.dataList = dataList;
}
public List<Model> getDataList() {
return dataList;
}
public synchronized static DataHolder getInstance() {
if (dataHolder == null) {
dataHolder = new DataHolder();
}
return dataHolder;
}
}
De tu primera actividad
private List<Model> dataList = new ArrayList<>();
DataHolder.getInstance().setDataList(dataList);
En la segunda actividad
private List<Model> dataList = DataHolder.getInstance().getDataList();
Puedes usar las SharedPreferences
...
Explotación florestal. ID de sesión del almacén de tiempo en
SharedPreferences
SharedPreferences preferences = getSharedPreferences("session",getApplicationContext().MODE_PRIVATE); Editor editor = preferences.edit(); editor.putString("sessionId", sessionId); editor.commit();
Desconectar. ID de sesión de recuperación de tiempo en las preferencias compartidas
SharedPreferences preferences = getSharedPreferences("session", getApplicationContext().MODE_PRIVATE); String sessionId = preferences.getString("sessionId", null);
Si no tiene el ID de sesión requerido, elimine las preferencias compartidas:
SharedPreferences settings = context.getSharedPreferences("session", Context.MODE_PRIVATE);
settings.edit().clear().commit();
Eso es muy útil, porque una vez guarda el valor y luego recupera cualquier lugar de actividad.
Solo tienes que enviar extras al llamar tu intención.
Me gusta esto:
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("Variable name", "Value you want to pass");
startActivity(intent);
Ahora, en el método OnCreate
de tu SecondActivity
puedes obtener los extras como este.
Si el valor que enviaste fue long
:
long value = getIntent().getLongExtra("Variable name which you sent as an extra", defaultValue(you can give it anything));
Si el valor que enviaste fue una String
:
String value = getIntent().getStringExtra("Variable name which you sent as an extra");
Si el valor que enviaste fue un Boolean
:
Boolean value = getIntent().getBooleanExtra("Variable name which you sent as an extra", defaultValue);
También puede pasar objetos de clase personalizados haciendo una clase parcelable . La mejor manera de hacer que sea parcelable es escribir su clase y luego pegarlo en un sitio como http://www.parcelabler.com/ . Haga clic en construir y obtendrá nuevo código. Copia todo esto y reemplaza el contenido de la clase original. Entonces-
Intent intent = new Intent(getBaseContext(), NextActivity.class);
Foo foo = new Foo();
intent.putExtra("foo", foo);
startActivity(intent);
y obtener el resultado en NextActivity como-
Foo foo = getIntent().getExtras().getParcelable("foo");
Ahora puedes simplemente usar el objeto foo como habrías usado.
Tenga en cuenta que había mencionado el uso de SharedPreference . Tiene una API simple y es accesible a través de las actividades de una aplicación. Pero esta es una solución torpe, y es un riesgo de seguridad si pasa información confidencial. Es mejor usar intenciones. Tiene una lista extensa de métodos sobrecargados que se pueden usar para transferir mejor muchos tipos de datos diferentes entre actividades. Echa un vistazo a intent.putExtra . Este link presenta el uso de putExtra bastante bien.
Al pasar datos entre actividades, mi enfoque preferido es crear un método estático para la actividad relevante que incluya los parámetros necesarios para lanzar la intención. Que a continuación, proporciona una fácil configuración y recuperación de parámetros. Así puede verse así
public class MyActivity extends Activity {
public static final String ARG_PARAM1 = "arg_param1";
...
public static getIntent(Activity from, String param1, Long param2...) {
Intent intent = new Intent(from, MyActivity.class);
intent.putExtra(ARG_PARAM1, param1);
intent.putExtra(ARG_PARAM2, param2);
return intent;
}
....
// Use it like this.
startActivity(MyActvitiy.getIntent(FromActivity.this, varA, varB, ...));
...
Luego, puede crear una intención para la actividad prevista y asegurarse de que tiene todos los parámetros. Se puede adaptar para fragmentos a. Un ejemplo simple arriba, pero entiendes la idea.
Trate de hacer lo siguiente:
Cree una clase simple de "ayudante" (fábrica para sus intenciones), como esta:
import android.content.Intent;
public class IntentHelper {
public static final Intent createYourSpecialIntent(Intent src) {
return new Intent("YourSpecialIntent").addCategory("YourSpecialCategory").putExtras(src);
}
}
Esta será la fábrica para todos sus intentos. Cada vez que necesite un nuevo Intent, cree un método de fábrica estático en IntentHelper. Para crear una nueva intención, solo debes decirlo así:
IntentHelper.createYourSpecialIntent(getIntent());
En tu actividad. Cuando desee "guardar" algunos datos en una "sesión", use lo siguiente:
IntentHelper.createYourSpecialIntent(getIntent()).putExtra("YOUR_FIELD_NAME", fieldValueToSave);
Y envía este intento. En la Actividad objetivo su campo estará disponible como:
getIntent().getStringExtra("YOUR_FIELD_NAME");
Así que ahora podemos usar Intent como la misma sesión anterior (como en servlets o JSP ).
Utilizo campos estáticos en una clase, y los obtengo / configuro:
Me gusta:
public class Info
{
public static int ID = 0;
public static String NAME = "TEST";
}
Para obtener un valor, use esto en una actividad:
Info.ID
Info.NAME
Para establecer un valor:
Info.ID = 5;
Info.NAME = "USER!";
Si desea transferir bitmap entre Activites / Fragments
Actividad
Pasar un bitmap entre activites.
Intent intent = new Intent(this, Activity.class);
intent.putExtra("bitmap", bitmap);
Y en la clase de actividad.
Bitmap bitmap = getIntent().getParcelableExtra("bitmap");
Fragmento
Pasar un bitmap entre fragmentos.
SecondFragment fragment = new SecondFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("bitmap", bitmap);
fragment.setArguments(bundle);
Para recibir dentro del SecondFragment
Bitmap bitmap = getArguments().getParcelable("bitmap");
Transferencia de grandes mapas de bits
Si está obteniendo una transacción de archivador fallida, esto significa que está excediendo el búfer de transacción de vinculación transfiriendo el elemento grande de una actividad a otra actividad.
Entonces, en ese caso, tiene que comprimir el mapa de bits como una matriz de bytes y luego descomprimirlo en otra actividad , como esta
En la primeraactividad
Intent intent = new Intent(this, SecondActivity.class);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPG, 100, stream);
byte[] bytes = stream.toByteArray();
intent.putExtra("bitmapbytes",bytes);
Y en la Segunda Actividad.
byte[] bytes = getIntent().getByteArrayExtra("bitmapbytes");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
De la actividad
int n= 10;
Intent in = new Intent(From_Activity.this,To_Activity.class);
Bundle b1 = new Bundle();
b1.putInt("integerNumber",n);
in.putExtras(b1);
startActivity(in);
A la actividad
Bundle b2 = getIntent().getExtras();
int m = 0;
if(b2 != null)
{
m = b2.getInt("integerNumber");
}
Puede pasar datos entre actividades en la aplicación de 3 maneras 1.Intent 2.SharedPreferences 3.Application
los datos que se pasan con intención tienen algún límite. Para una gran cantidad de datos, puede usar el uso compartido de datos a nivel de la aplicación y al almacenarlo en la preferencia compartida aumenta el tamaño de la aplicación
Si usas kotlin:
En MainActivity1:
var intent=Intent(this,MainActivity2::class.java)
intent.putExtra("EXTRA_SESSION_ID",sessionId)
startActivity(intent)
En MainActivity2:
if (intent.hasExtra("EXTRA_SESSION_ID")){
var name:String=intent.extras.getString("sessionId")
}
Recientemente lancé Vapor API , un framework para Android con sabor a jQuery que simplifica todo tipo de tareas como esta. Como se mencionó, SharedPreferences
es una forma de hacer esto.
VaporSharedPreferences
se implementa como Singleton, por lo que es una opción, y en la API de Vapor tiene un .put(...)
método muy sobrecargado para que no tenga que preocuparse explícitamente por el tipo de datos que está confirmando, siempre que sea compatible. También es fluido, por lo que puede encadenar llamadas:
$.prefs(...).put("val1", 123).put("val2", "Hello World!").put("something", 3.34);
Opcionalmente, también guarda los cambios automáticamente y unifica el proceso de lectura y escritura bajo el capó para que no tenga que recuperar explícitamente un Editor como lo hace en Android estándar.
Alternativamente, usted podría usar una Intent
. En la API de Vapor también puede usar el .put(...)
método sobrecargado de chainable en un VaporIntent
:
$.Intent().put("data", "myData").put("more", 568)...
Y pasarlo como extra, como se menciona en las otras respuestas. Puede recuperar extras de su Activity
, y además, si está usando VaporActivity
esto, se hace por usted automáticamente para que pueda usar:
this.extras()
Para recuperarlos en el otro extremo Activity
, cambie a.
Espero que sea de interés para algunos :)
/*
* If you are from transferring data from one class that doesn''t
* extend Activity, then you need to do something like this.
*/
public class abc {
Context context;
public abc(Context context) {
this.context = context;
}
public void something() {
context.startactivity(new Intent(context, anyone.class).putextra("key", value));
}
}
Intent intent = new Intent(YourCurrentActivity.this, YourActivityName.class);
intent.putExtra("NAme","John");
intent.putExtra("Id",1);
startActivity(intent);
Puedes recuperarlo en otra actividad. Dos caminos:
int id = getIntent.getIntExtra("id", /* defaltvalue */ 2);
La segunda forma es:
Intent i = getIntent();
String name = i.getStringExtra("name");