星空网 > 软件开发 > Java

关于通过Parcelable协议传递数据时出现邮包错误

  最近第一次使用到Intent传递自定义对象数据的Parcelable方式,先说一下Parcelable的实现方式吧

  Parcelable的实现原理首先是将一个完整的对象进行分解,分解后的每一部分都是Intent所支持的一个类型,这样也就实现传递对象的功能了。

  Parcelable需要实现三个东西:

  1)  describeContents方法,这个方法直接返回0就可以了;

  2)  writeToParcel方法,这个方法调用Parcel的writeXXX()方法将类的数据写入外部提供的Parcel中;

  3)  提供一个静态的CREATOR常量实现Parcelable.Creator接口,这个接口要重写两个方法,newArray(int size)只需要new出一个该自定义对象的数组,并使用方法中传入的size作为数组大小返回就可以了;而createFromParcel(Parcel in)方法中我们要实现从in中都去出刚才写出的数据的功能;

 

Android示例代码:

/** * 媒体实体类 */public class Media implements Parcelable {  private String name;  private String uri;  private String singer;  private String id;  private int duration;  private int album_id;  private String key;  public Media() {  }   ……  ……  @Override  public void writeToParcel(Parcel dest, int flags) {    dest.writeString(name);    dest.writeString(uri);    dest.writeString(singer);    dest.writeString(id);    dest.writeInt(duration);    dest.writeInt(album_id);    dest.writeString(key);  }  public static final Parcelable.Creator<Media> CREATOR = new Creator<Media>() {    @Override    public Media[] newArray(int size) {      return new Media[size];    }    @Override    public Media createFromParcel(Parcel in) {      return new Media(in);    }  };  public Media(Parcel in) {    name = in.readString();    uri = in.readString();    singer = in.readString();    id = in.readString();    duration = in.readInt();    album_id = in.readInt();    key = in.readString();  }}

 

  而在我实际开发过程中,在获取数据时系统报出了java.lang.RuntimeException: Parcel android.os.Parcel@4aa21e7c: Unmarshalling unknown type code 77 at offset 328的邮包错误,最开始以为是哪里忘写了,查了一堆资料还是没能解决。

  后面仔细看了下才发现在开发的时候我在public Media createFromParcel(Parcel in)中调用public Media(Parcel in)取出数据时将duration = in.readInt()和album_id = in.readInt();的顺序写反了,改过来就没错了,根本原因就是分解跟取出来的时候顺序一定要一样,谨记!




原标题:关于通过Parcelable协议传递数据时出现邮包错误

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

快递越南怎么寄:https://www.goluckyvip.com/tag/105503.html
从中国寄东西到越南怎么收费:https://www.goluckyvip.com/tag/105504.html
东莞到越南的物流:https://www.goluckyvip.com/tag/105505.html
中国寄快递到越南贵吗:https://www.goluckyvip.com/tag/105506.html
中国寄到越南快递:https://www.goluckyvip.com/tag/105507.html
中国寄快递到越南:https://www.goluckyvip.com/tag/105508.html
长治婚庆女司仪和主持人:https://www.vstour.cn/a/366176.html
北京丰台区水上乐园哪家好玩?:https://www.vstour.cn/a/366177.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流