You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中使用Parcelable传递Match对象时数据损坏问题

Android Parcelable传递Match对象数据损坏排查方案
  • Parcelable读写字段顺序不匹配
    检查Match类的writeToParcel()和CREATOR.createFromParcel()方法,两个方法里的字段读写顺序必须完全一致。比如writeToParcel里先写id、再写local、接着写score、opponentName,那createFromParcel里必须按同样的顺序读取这些字段。顺序错位会导致后续字段读取到错误位置的数据,出现只有前几个字段正常的情况。

  • 字段类型读写方法不对应
    确保每个字段的写入和读取方法类型严格匹配:

    • 基本类型:int用writeInt()/readInt(),long用writeLong()/readLong();布尔值注意低版本API用writeByte((byte)(flag ? 1 : 0))和readByte() != 0,不要误用readBoolean()(Android 10及以上才支持)。
    • 自定义Parcelable类型:如果Match里包含其他Parcelable对象(比如User),写入时要调用obj.writeToParcel(parcel, flags),读取时要通过User.CREATOR.createFromParcel(parcel)实例化,不能直接用基本类型读写方法。
    • 字符串/集合:String用writeString()/readString(),集合类要使用writeList()/readList()等对应方法。
  • CREATOR实现错误
    检查CREATOR的createFromParcel()方法:

    • 实例化Match对象时,传入的参数顺序要和读取字段的顺序一致,不能漏传或错传字段。
    • newArray()方法必须返回正确类型的数组,比如return new Match[size];,不能写成new Object[size];。
  • 空值/默认值处理不当
    对于可能为null的字段(比如String类型),写入时直接调用writeString(null)即可,读取时readString()会正确返回null;如果自行处理为空字符串再写入,可能导致接收端解析异常。另外,基本类型字段要确保写入时的默认值和读取时的处理逻辑一致,避免出现默认值覆盖有效数据的情况。

内容的提问来源于stack exchange,提问作者Jmx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:55:35