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

时间:2014-02-13 17:35:36

标签: android android-intent serialization gson

我试图通过使用下面的代码

将json序列化对象传递给intent

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

但它会抛出运行时异常,请帮忙。

   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)

3 个答案:

答案 0 :(得分:32)

不,你是以错误的方式使用它。

将对象放在intent中:

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

答案 1 :(得分:1)

当您的对象或模型扩展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);

我用它来传递Intent传递数据,但是用于改造

答案 2 :(得分:1)

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