how to deserialize this type:
public Intent putExtra(String name, Serializable value) example:
intent.putExtra("activityToPass", GoToThisActivity.class); ??? getIntent().getExtras.getSerializable("activityToPass"); how to do this please;
please help!!
1 Answer
If you want to pass a custom object from one activity to the other, first you must have your custom object's class to implement java.io.Serializable:
public class SomeObject implements Serializable { private String name; public SomeObject (final String name) { this.name = name; } [...] } final SomeObject myExtra = new SomeObject("any name"); Then you can add this myExtra to the intent with which you call your new Activity:
final Intent intent = new Intent(this, GoToThisActivity.class); intent.putExtra("serializedExtra", myExtra); startActivity(intent); Inside your GoToThisActivity class' onCreate method you can extract this extra as:
final Intent intent = getIntent(); if (intent.hasExtra("serializedExtra")) final SomeObject myExtra= (SomeObject)intent. getSerializableExtra("serializedExtra"); [...] } And now you have your custom object in your new activity.
Update 1: Passing a class to an other activity with Intent
If you want to pass a Class instance to an intent:
intent.putExtra("classExtra", GoToThisActivity.class); and to deserialize it in the other activity:
if (intent.hasExtra("classExtra")) { final Class<?> classExtra= (Class<?>)intent. getSerializableExtra("classExtra"); [...] } Update 2:
When deserializing an array of custom objects, you have to make sure, that the elements in that array implement the Serializable interface.
To stay at your sample:
public class ButtonPick implements Serializable { public static final ButtonPick EDIT = new ButtonPick(); public static final ButtonPick DELETE = new ButtonPick(); } You put the extra in the Intent:
intent.putExtra("buttonPicks", new ButtonPick[] {ButtonPick.DELETE,ButtonPick.EDIT}); And inside the other activity deserialize it:
if (intent.hasExtra("buttonPicks")) { final Object[] buttonPicks= (Object[])intent. getSerializableExtra("buttonPicks"); [...] } You MUST cast the array as Object[] regardless to the original being ButtonPicks[].
The elements inside the array have their proper type, so inside are the
{ ButtonPicks.EDIT, ButtonPicks.DELETE }
members.
You need to cast them individually.