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

通过Intent在Activity间传递对象时遇‘New hash 0...’错误求助

解决Intent传递Parcelable对象时的哈希错误问题

嘿,我之前也碰到过这个诡异的Parcelable哈希错误,咱们来一步步排查解决!

你现在的场景是用Intent在Activity1和Activity2之间传递mission和task两个Parcelable对象,但遇到了这个错误日志:

New hash 0 is before end of array hash 3552645 at index 1 key null

先看你贴的代码,传递和获取的逻辑本身没问题,问题大概率出在Parcelable接口的实现细节上,下面是几个最可能的解决方向:

  • 检查Parcelable读写的字段顺序和类型是否完全一致
    这是最常见的原因!在自定义的Mission和Task类里,writeToParcel方法写入字段的顺序,必须和createFromParcel(或构造函数)里读取字段的顺序、类型完全对应,哪怕差一个都不行。举个正确的例子:

    public class Mission implements Parcelable {
        private String missionName;
        private int missionId;
    
        // 构造函数、describeContents方法等省略...
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(missionName); // 先写字符串
            dest.writeInt(missionId);     // 再写整数
        }
    
        protected Mission(Parcel in) {
            missionName = in.readString(); // 先读字符串,顺序和写入一致
            missionId = in.readInt();     // 再读整数
        }
    
        public static final Creator<Mission> CREATOR = new Creator<Mission>() {
            @Override
            public Mission createFromParcel(Parcel in) {
                return new Mission(in);
            }
    
            @Override
            public Mission[] newArray(int size) {
                return new Mission[size];
            }
        };
    }
    

    一定要保证写入和读取的每一步完全对应,新增字段时也要同步更新两边的代码。

  • 检查嵌套对象的Parcelable实现
    如果mission或task里包含其他自定义对象(比如一个SubTask类),那这个嵌套对象也必须正确实现Parcelable接口。写入时要调用dest.writeParcelable(subTask, flags),读取时用in.readParcelable(SubTask.class.getClassLoader()),不能遗漏任何嵌套对象的处理。

  • 处理null字段的情况
    虽然Parcelable本身支持null,但如果是自定义嵌套对象,最好在写入时显式判断null,避免解析异常:

    // 写入时
    if (subTask != null) {
        dest.writeInt(1);
        dest.writeParcelable(subTask, flags);
    } else {
        dest.writeInt(0);
    }
    
    // 读取时
    int hasSubTask = in.readInt();
    if (hasSubTask == 1) {
        subTask = in.readParcelable(SubTask.class.getClassLoader());
    } else {
        subTask = null;
    }
    
  • 清理并重新构建项目
    有时候Android Studio的增量构建缓存会出问题,导致Parcelable的代码解析异常。试试点击菜单栏的Build > Clean Project,然后Build > Rebuild Project,说不定就能解决这个奇怪的哈希错误。

一般来说,先排查第一点的读写顺序问题,这个解决后大部分情况都能搞定!

内容的提问来源于stack exchange,提问作者M.FD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:30:50