是否可以使用Intent作为Extra发送自定义对象

时间:2013-04-18 13:04:40

标签: android android-intent xamarin.android xamarin

我问这个问题:提供字符串,int等等的instread,我们可以在创建新Intent期间推送自定义对象吗?

newActivity.PutExtra("JsonDataResult", business.getJSON());

事实上,由于JSON(来自webrequest)我构建了一个对象,我解析它并将其放在一个对象上。

此时我将从webrequest返回的字符串传递给另一个意图,但解析需要花费很长时间才能完成,因此使用意图传递自定义对象的能力可能非常酷。

编辑:我正在使用monodroid / xamarin,所以

Android.OS.IParcelable无法实现, Java.IO.ISerializable无法实现。

3 个答案:

答案 0 :(得分:2)

您可以让自定义类实现Parcelable(Google表示更快,但您必须执行更多编码)或Serializable。 然后将您的对象添加到一个包(或“额外”):

Bundle b = new Bundle()
b.putParcelable("myObject",myObject);
b.putSerializable("myObject",myObject);

有关Parcelable结帐this

的信息

如果您对ParcelableSerializable之间的区别感兴趣,请查看this

我个人更喜欢使用Serializable进行简单的对象传递,因为代码不会被这么多代码所破坏。

编辑:好的不是你的问题与this非常相似吗?

答案 1 :(得分:1)

正如您所指定的那样,您使用的是Monodroid,看起来并不简单。我快速搜索并找到了this forum post

在Monodroid中列出了以下解决此问题的方法:

  

将自定义对象存储为某个地方的全局变量,并从第二个活动中读取它

这有点麻烦和不好的做法,但会奏效。

或者

  

将您的类序列化为字符串并将该字符串发送到第二个Activity

这将是一项更艰苦的工作,但更好的做法

答案 2 :(得分:0)

这是一个如何创建Parcelable类的示例:

public class Person implements Parcelable { 
    private String name;
    private String surname;
    private String email;
        // Get and Set methods

    @Override
    public int describeContents() {
         return hashCode();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(surname);
        dest.writeString(email);
    }

 // We reconstruct the object reading from the Parcel data
    public Person(Parcel p) {
        name = p.readString();
        surname = p.readString();
        email = p.readString();
    }
    public Person() {}

   // We need to add a Creator

 public static final Parcelable.Creator<person> CREATOR = new Parcelable.Creator<person>() {

    @Override
    public Person createFromParcel(Parcel parcel) {  
       return new Person(parcel);
    }

    @Override
    public Person[] newArray(int size) {  
       return new Person[size];
    }
};

如果您想使用Parcelable,请查看here