Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass gson serialised object to Intent in android?

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)
like image 604
ida Avatar asked Feb 13 '14 17:02

ida


People also ask

Can we pass object through intent in Android?

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.

How do I pass model data from one activity to another in Android?

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()


3 Answers

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);
like image 150
NullPointerException Avatar answered Oct 13 '22 02:10

NullPointerException


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());
like image 43
John Pang Avatar answered Oct 13 '22 01:10

John Pang


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

like image 1
Fidan Bacaj Avatar answered Oct 13 '22 00:10

Fidan Bacaj