如何在android中将gson序列化的对象传递给Intent?

我想通过使用下面的代码将gson序列化对象传递给intent

intent.putExtra("com.example", vo); // vo is the gson serialised object.

但它是抛出运行时exception,请帮助。

  java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.da) 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) 

不,你用错了。

把对象的意图如下:

 Gson gson = new Gson(); Intent intent = new Intent(Source.this, Target.class); intent.putExtra("obj", gson.toJson(yourObject)); 

并在另一个活动中获取对象:

 Gson gson = new Gson(); String strObj = getIntent().getStringExtra("obj"); SourceObject obj = gson.fromJson(strObj, SourceObject.class); 

当你的对象或模型扩展RealmObject时,你需要使用:

步骤1:

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

  intent.putExtra("userfrom",gson.toJson(obj)); 

第2步:

 Gson gson = new GsonBuilder().create(); user =gson.fromJson(getIntent().getStringExtra("userfrom"),User.class); 

我用这个数据与意图传递数据,但工作改造

我在我的模型和我的模型使用的其他模型(子模型)中添加了implements Serializable 。 然后我可以通过Intent传递GSON对象:

 public class MyModel implements Serializable { SubModel subModel; } public class SubModel implements Serializable { ... } 

片段:

 Intent startIntent = new Intent(getContext(), NextActivity.class); startIntent.putExtra("mymodel", myModelObject); startActivity(startIntent); 

在下一个活动中:

 Intent intent = getIntent(); MyModel mymodel = (MyModel) intent.getSerializableExtra("mymodel"); // test if we get the model correctly: setTitle(mymodel.getName());