当作为 Intent 的 Extra 发送时 Parcelable 对象完全改变

问题描述

我正在尝试将 Parcelable 对象作为附加对象放入意图中,并将其传递给下一个 Activity,它不会崩溃,但对象发生了巨大变化。我在单击 Fragment 中 RecyclerView 中的项目并从中打开 Activity 时发送。

我是这样发送的:

AdminProfile adminProfile = list.get(position).admin;
Intent intent = new Intent(view.getContext(),ClosedChatActivity.class);
intent.putExtra("chat",adminProfile);
view.getContext().startActivity(intent);

我是这样理解的:

adminProfile = (AdminProfile) getIntent().getExtras().getParcelable("chat");

这里是班级:

public class AdminProfile implements Parcelable {
    public static final Creator<AdminProfile> CREATOR = new Creator<AdminProfile>() {
        @Override
        public AdminProfile createFromParcel(Parcel in) {
            return new AdminProfile(in);
        }

        @Override
        public AdminProfile[] newArray(int size) {
            return new AdminProfile[size];
        }
    };
    public Long idUser;
    public String name;
    public String professio;
    public String description;
    public List<WebLink> webLinks;
    public Long idOficina;

    protected AdminProfile(Parcel in) {
        if (in.readByte() == 0) {
            idUser = null;
        } else {
            idUser = in.readLong();
        }
        name = in.readString();
        professio = in.readString();
        description = in.readString();
        webLinks = in.createTypedArrayList(WebLink.CREATOR);
        if (in.readByte() == 0) {
            idOficina = null;
        } else {
            idOficina = in.readLong();
        }
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writetoParcel(Parcel parcel,int i) {
        parcel.writeLong(idUser);
        parcel.writeString(name);
        parcel.writeString(professio);
        parcel.writeString(description);
        parcel.writeLong(idOficina);
        parcel.writeList(webLinks);
    }
}

我不明白为什么,但是当我发送对象时我有 UserId=3,但是当我收到它时是 userId=55834574848。有什么想法吗?

解决方法

Android Studio 会自动填充 Parcelable 函数,读取第一个字节会将其搞砸。

变化

if (in.readByte() == 0) {
    idUser = null;
} else {
    idUser = in.readLong();
}

为了

idUser = in.readLong();

修复它。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...