4

我有一个存储在扩展 intentService 的类中的对象数组列表。它的对象实例变量是:

int id;
String name;
HashMap<Long, Double> historicFeedData

我希望能够将此 arrayList 传递回 Activity。我已经读过 Parcelable 是当您想将对象从服务传递到活动时要走的路。我写入包裹的方法如下所示:

public void writeToParcel(Parcel out, int flags) {
     out.writeInt(id);
     out.writeString(name);
     dest.writeMap(historicFeedData);
 }

我不确定如何从包裹中读回哈希图?这个问题建议使用 Bundle 但我不确定它们的意思。非常感谢任何帮助。

4

1 回答 1

6

如果您正在实现Parcelable,您需要有一个名为 CREATOR 的静态 Parcelable.Creator 字段来创建您的对象 - 请参阅 doco RE createFromParcel()

 public static final Parcelable.Creator<MyParcelable> CREATOR
         = new Parcelable.Creator<MyParcelable>() {
     public MyParcelable createFromParcel(Parcel in) {
         return new MyParcelable(in);
     }

     public MyParcelable[] newArray(int size) {
         return new MyParcelable[size];
     }
 };

然后在使用 Parcel 的构造函数中,您需要以相同的顺序读取您编写的字段。

Parcel 有一个名为 readMap() 的方法。请注意,您需要为 HashMap 中的对象类型传递一个类加载器。由于你的存储双打它也可能与作为 ClassLoader 传递的 null 一起使用。就像是 ...

in.readMap(historicFeedData, Double.class.getClassLoader());
于 2013-09-15T00:15:53.010 回答