Android, Can I use putExtra to pass multiple values

AndroidParameters

Android Problem Overview


I want to pass two values to another activity can I do this with putExtra or do I have to do it a more complicated way, which it seems from my reading. E.g.. can something like this work?

public final static String ID_EXTRA="com.fnesse.beachguide._ID";

Intent i = new Intent(this, CoastList.class);
i.putExtra(ID_EXTRA, "1", "111");
startActivity(i);

The above gives an error.

Edit

The first thing I tried was similar to:

i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");

but ID_EXTRA2 seems to write over ID_EXTRA1

So,

i.putExtra(ID_EXTRA, new String[] { "1", "111"});

Looks like the go but how do I extract the values from the array in the second activity, I have been using this for a single value.

passedVar = getIntent().getStringExtra(CoastList.ID_EXTRA);

I guess I have to turn ID_EXTRA into an array somehow???

Android Solutions


Solution 1 - Android

You could pass a 'bundle' of extras rather than individual extras if you like, for example:-

Intent intent = new Intent(this, MyActivity.class);
Bundle extras = new Bundle();
extras.putString("EXTRA_USERNAME","my_username");
extras.putString("EXTRA_PASSWORD","my_password");
intent.putExtras(extras);
startActivity(intent);

Then in your Activity that your triggering, you can reference these like so:-

Intent intent = getIntent();
Bundle extras = intent.getExtras();
String username_string = extras.getString("EXTRA_USERNAME");
String password_string = extras.getString("EXTRA_PASSWORD");

Or (if you prefer):-

Bundle extras = getIntent().getExtras();
String username_string = extras.getString("EXTRA_USERNAME");
String password_string = extras.getString("EXTRA_PASSWORD");

Hope this helps! :-)

Solution 2 - Android

You can pass multiple values by using multiple keys. Instead of

i.putExtra(ID_EXTRA, "1", "111");

do

i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");

Of course you have to define 2 constants for the keys and have to read both seperately in the new activity.

Or you can pass a string array via

i.putExtra(ID_EXTRA, new String[] { "1", "111"});

Solution 3 - Android

Putting extra values in class

public class MainActivity extends Activity {
		public final static String USERNAME = "com.example.myfirstapp.MESSAGE";
		public final static String EMAIL = "com.example.myfirstapp.EMAIL";

public void registerUser(View view) {
		Intent intent = new Intent(this, DisplayMessageActivity.class);
		EditText userNameTxt = (EditText) findViewById(R.id.editText1);
		EditText emailTxt = (EditText) findViewById(R.id.editText2);
		String userName = userNameTxt.getText().toString();
		String email = emailTxt.getText().toString();
		intent.putExtra(USERNAME, userName);
		intent.putExtra(EMAIL,email);
		startActivity(intent);

	}

Reading extra values from another class

public class DisplayMessageActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		Intent intent = getIntent();
		String user = intent.getStringExtra(MainActivity.USERNAME);
		String email = intent.getStringExtra(MainActivity.EMAIL);	

Solution 4 - Android

No you can't but you can pass an array using:

public Intent putExtra (String name, String[] value)

like this for example:

i.putExtra(ID_EXTRA, new String[]{"1", "111"});

Solution 5 - Android

Your example won't work, since the Extras are made out of a Key and a Value. You cant put multiple Keys and Values in one Extra

Also, your keys need to be Strings as far as I know (and noticed) but I might be wrong on that one.

Try this:

public final static String ID_EXTRA="com.fnesse.beachguide._ID";

Intent i = new Intent(this, CoastList.class);
i.putExtra("ID_Extra", ID_EXTRA);
i.putExtra("1", 111);
startActivity(i);

Solution 6 - Android

Passing bundle of extra for kotlin coders

val intent = Intent(this, MyActivity::class.java)
val extras = Bundle().apply {
    putString("EXTRA_USERNAME", "my_username")
    putString("EXTRA_PASSWORD", "my_password")
}
intent.putExtras(extras)
startActivity(intent)

Then retrieve your values in the other activity like below:

val extras = getIntent().extras
val username_string = extras?.getString("EXTRA_USERNAME")
val password_string = extras?.getString("EXTRA_PASSWORD")

Solution 7 - Android

For a single small amount of value putExtra is perfect but when you pass multiple values and need to pass custom ArrayList or List then I think it's a bad idea. Solution is you can use Parcelable. You and also use Singleton or Serializable also.

Parcelable:

> Parcelable class which you need to share.

 public class MyParcelable implements Parcelable {
     private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };
     
     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }

> Form your activity where you want to send

MyParcelable example = new MyParcelable();
.....
.....
Bundle bundle = new Bundle();
bundle.putParcelable("example", Parcels.wrap(example));

> From another activity where you want to receive

MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example"));

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser903601View Question on Stackoverflow
Solution 1 - AndroidSteveView Answer on Stackoverflow
Solution 2 - Androiduser658042View Answer on Stackoverflow
Solution 3 - AndroidAbhiView Answer on Stackoverflow
Solution 4 - AndroidgwvatieriView Answer on Stackoverflow
Solution 5 - AndroidSander van't VeerView Answer on Stackoverflow
Solution 6 - AndroidTee-BoiView Answer on Stackoverflow
Solution 7 - AndroidMd Imran ChoudhuryView Answer on Stackoverflow