android传递参数在第一个活动中是正确的,在第二个活动中是错误的

时间:2016-09-14 17:33:00

标签: android

我将参数从第一个活动传递到第二个活动,在第一个活动中我可以看到所有参数,但在第二个活动中,其中一个参数始终是0,其余的我可以看到它们。我通过idurllikes,like参数始终为null,您可以帮助识别问题吗?

我正在传递这样的数据,在systemoutprint中我得到了值2

   Listitem listitem = new Listitem(item.getOrder(), item.getId(), item.getUrl(), item.getUserName(), item.getLikes());

                Intent intent = new Intent(mcontext,SingleObjectActivity.class);

                System.out.println(item.getUrl()); //i can see correct value
                System.out.println(item.getLikes());//i can see correct value

                        intent.putExtra("Object_list", (Parcelable) listitem);


                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mcontext.startActivity(intent);

此处是第二个活动,网址正确,likes始终0

 Listitem li = ((Listitem) getIntent().getParcelableExtra("Object_list"));
    calc= li.getLikes();
    id=li.getId();
    System.out.println(li.getLikes());

这里是logcat

09-14 20:21:00.069 8874-8874/com.justedhak.www.i I/System.out: http://justedhak.com/old-files/images/uploaded_images57d985894b416.png
09-14 20:21:00.069 8874-8874/com.justedhak.www.i I/System.out: 2
09-14 20:21:00.069 8874-8874/com.justedhak.www.i I/Timeline: Timeline: Activity_launch_request id:com.justedhak.www.i time:16396709
09-14 20:21:00.199 8874-8874/com.justedhak.www.i I/System.out: 0

这里是listitem,我可能会对writeToParcel

有疑问
public Listitem(int order, String id, String url, String userName, int likes) {
    this.id = id;
    this.url = url;
    this.userName = userName;
    this.order = order;
    this.likes = likes;
}

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

public void setUrl(String url) {
    this.url = url;
}

public String getUrl() {
    return url;
}

public void setId(String id) {
    this.id = id;
}

public String getId() {
    return id;
}


public int getLikes() {
    return likes;
}

public void setLikes(int likes) {
    this.likes = likes;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(this.id);
    // dest.writeString(this.name);
    dest.writeString(this.url);
    dest.writeInt(this.likes);

}

public static final Parcelable.Creator<Listitem> CREATOR = new Parcelable.Creator<Listitem>() {
    public Listitem createFromParcel(Parcel in) {
        return new Listitem(in);
    }

    public Listitem[] newArray(int size) {
        return new Listitem[size];
    }
};

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public int getOrder() {
    return order;
}

public void setOrder(int order) {
    this.order = order;
}

}

1 个答案:

答案 0 :(得分:1)

您的意图代码似乎是正确的。

您没有显示从包裹代码中读取的内容,因此它也可能存在。

无论如何,parcelable代码是一件很痛苦的事情,所以我建议你使用一个自动生成它的库。这一个github.com/johncarl81/parceler所有你需要做的是@Parcel注释并使用Parcels.wrapParcels.unwrap静态方法

示例:

intent.putExtra("Object_list", Parcels.wrap(listitem));

// then

Listitem li = (Listitem) Parcels.unwrap(getIntent().getParcelableExtra("Object_list"));