i am trying to pass the gson serialised object to intent by using the below code
intent.putExtra("com.example", vo); // vo is the gson serialised object.
but it is throwing the run time exception, Please help.
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.d.a)
at android.os.Parcel.writeSerializable(Parcel.java:1285)
at android.os.Parcel.writeValue(Parcel.java:1233)
at android.os.Parcel.writeMapInternal(Parcel.java:591)
at android.os.Bundle.writeToParcel(Bundle.java:1646)
at android.os.Parcel.writeBundle(Parcel.java:605)
at android.content.Intent.writeToParcel(Intent.java:6831)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1927)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1419)
at android.app.Activity.startActivityForResult(Activity.java:3390)
at android.app.Activity.startActivityForResult(Activity.java:3351)
at android.app.Activity.startActivity(Activity.java:3587)
at android.app.Activity.startActivity(Activity.java:3555)
One way to pass objects in Intents is for the object's class to implement Serializable. This interface doesn't require you to implement any methods; simply adding implements Serializable should be enough. To get the object back from the Intent, just call intent.
putExtra() method is used for send the data, data in key-value pair key is variable name and value can be Int, String, Float etc. getStringExtra() method is for getting the data(key) which is send by above method. according the data type of value there are other methods like getIntExtra(), getFloatExtra()
No you are using it in the wrong way.
Put the object in the intent as:
Gson gson = new Gson();
Intent intent = new Intent(Source.this, Target.class);
intent.putExtra("obj", gson.toJson(yourObject));
and get the object in another activity as:
Gson gson = new Gson();
String strObj = getIntent().getStringExtra("obj");
SourceObject obj = gson.fromJson(strObj, SourceObject.class);
I added implements Serializable
to my model AND other models (sub-models) used by my model. Then I can pass the GSON object via Intent:
public class MyModel implements Serializable {
SubModel subModel;
}
public class SubModel implements Serializable {
...
}
In fragment:
Intent startIntent = new Intent(getContext(), NextActivity.class);
startIntent.putExtra("mymodel", myModelObject);
startActivity(startIntent);
In next activity:
Intent intent = getIntent();
MyModel mymodel = (MyModel) intent.getSerializableExtra("mymodel");
// test if we get the model correctly:
setTitle(mymodel.getName());
When your object or Model is extend RealmObject you need to use that:
Step1:
Gson gson = new GsonBuilder() .setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
})
.create();
And
intent.putExtra("userfrom",gson.toJson(obj));
Step2:
Gson gson = new GsonBuilder().create();
user =gson.fromJson(getIntent().getStringExtra("userfrom"),User.class);
I used this for pass data with Intent but work for retrofit
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With