Поместите Parcelable через намерение

Я пытаюсь передать объект Parcelable из действия A в действие B через намерение:

Intent intent = new Intent (A.this, B.class);

intent.putExtra ("post", mypost); // where post implements Parcelable`

В действии B я получил объект сообщения следующим образом:

Post myPost = getIntent().getParcelableExtra("post");

В активности B поля объекта myPost смешаны, например. У меня есть поля postText и postDate в модели Post, значения этих полей в активности B смешаны.

Почему это может произойти? Мой класс модели выглядит следующим образом:

открытый класс Post реализует Parcelable, Serializable {

private static final long serialVersionUID = 2L;

@SerializedName("author")
private User author;

@SerializedName("comments_count")
private String commentsCount;

@SerializedName("image")
private String imageToPost;

@SerializedName("parent_key")
private String parentKey;

@SerializedName("created_date")
private String postDate;

@SerializedName("id")
private String postId;

@SerializedName("text")
private String postText;

@SerializedName("title")
private String postTitle;

@SerializedName("shared_post_id")
private String sharedPostId;

@SerializedName("url")
private String urlToPost;

@SerializedName("video")
private String videoToPost;

public Post() {
}

public Post(Parcel in) {
    author = (User) in.readValue(getClass().getClassLoader());
    commentsCount = in.readString();
    imageToPost = in.readString();
    parentKey = in.readString();
    postDate = in.readString();
    postId = in.readString();
    postText = in.readString();
    postTitle = in.readString();
    sharedPostId = in.readString();
    urlToPost = in.readString();
    videoToPost = in.readString();
}

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

    @Override
    public Post[] newArray(int size) {
        return new Post[size];
    }
};

public User getAuthor() {
    return author;
}

public void setAuthor(User author) {
    this.author = author;
}

public String getPostDate() {
    return postDate;
}

public void setPostDate(String postDate) {
    this.postDate = postDate;
}

public String getPostTitle() {
    return postTitle;
}

public void setPostTitle(String postTitle) {
    this.postTitle = postTitle;
}

public String getPostText() {
    return postText;
}

public void setPostText(String postText) {
    this.postText = postText;
}

public String getPostId() {
    return postId;
}

public void setPostId(String postId) {
    this.postId = postId;
}

public String getUrlToPost() {
    return urlToPost;
}

public void setUrlToPost(String urlToPost) {
    this.urlToPost = urlToPost;
}

public String getImageToPost() {
    return imageToPost;
}

public void setImageToPost(String imageToPost) {
    this.imageToPost = imageToPost;
}

public String getVideoToPost() {
    return videoToPost;
}

public void setVideoToPost(String videoToPost) {
    this.videoToPost = videoToPost;
}

public String getParentKey() {
    return parentKey;
}

public void setParentKey(String parentKey) {
    this.parentKey = parentKey;
}

public String getCommentsCount() {
    return commentsCount;
}

public void setCommentsCount(String commentsCount) {
    this.commentsCount = commentsCount;
}

public String getSharedPostId() {
    return sharedPostId;
}

public void setSharedPostId(String sharedPostId) {
    this.sharedPostId = sharedPostId;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeValue(author);
    dest.writeString(commentsCount);
    dest.writeString(imageToPost);
    dest.writeString(parentKey);
    dest.writeString(postDate);
    dest.writeString(postId);
    dest.writeString(postText);
    dest.writeString(postTitle);
    dest.writeString(sharedPostId);
    dest.writeString(urlToPost);
    dest.writeString(videoToPost);
}

}


person Ani Karapetyan    schedule 15.04.2016    source источник
comment
где твой writeToParcel ? Кстати, есть плагины, которые автоматизируют этот шаг для вас.   -  person Blackbelt    schedule 15.04.2016
comment
Это мой любимый плагин Parceable github.com/mcharmas/android-parcelable-intellij- плагин. Возможно, что в вашем writeToParcel() вы также перепутали порядок написания ваших предметов.   -  person Edson Menegatti    schedule 15.04.2016
comment
@Anil: Пожалуйста, опубликуйте полный код класса Post. Я думаю, это происходит потому, что вы пишете объект в другом порядке, чем чтение. Пожалуйста, напишите, чтобы я мог сделать это более ясным.   -  person Sagar Trehan    schedule 15.04.2016
comment
Спасибо, но в моей модели я писал и читал в правильном (том же) порядке.   -  person Ani Karapetyan    schedule 15.04.2016
comment
Возможно, есть какая-то ошибка, которую вы не видите. По крайней мере, это не сделает вопрос беспорядочным, так почему бы просто не опубликовать его, чтобы другие читатели не беспокоились.   -  person JacksOnF1re    schedule 15.04.2016


Ответы (1)


Добавьте descriptionContents и writeToParcel.

Примеры:

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(name);
    dest.writeString(email);
    dest.writeString(pass);
    dest.writeFloat(amountPaid);
    dest.writeString(url);
    dest.writeInt(age);
}
person dpulgarin    schedule 15.04.2016
comment
У меня есть функция writeParcel и descriptionContents, также моя модель читает и записывает посылки в правильном порядке: - person Ani Karapetyan; 15.04.2016