1

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

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

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

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

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

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

4

3 回答 3

2

你可以让你的自定义类实现Parcelable(谷歌说它更快,但你必须做更多的编码)或 Serializable. 然后将您的对象添加到捆绑包(或“额外”):

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

有关Parcelable检查此信息的信息

如果您对两者之间的区别ParcelableSerializable更详细的信息感兴趣,请查看

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

编辑:好的,你的问题不是和这个很相似吗?

于 2013-04-18T13:08:46.147 回答
1

正如您所指定的,您使用的是 Monodroid,它看起来并不简单。我快速搜索并找到了这个论坛帖子

其中在 Monodroid 中列出了针对此问题的以下解决方案:

将要作为全局变量传递的自定义对象存储在某处,然后从您的第二个活动中读取它

这有点混乱和不好的做法,但会奏效。

或者

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

这将是一个更努力的工作,但更好的实践

于 2013-04-18T13:30:03.277 回答
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,请看这里。

于 2013-04-18T13:21:57.897 回答