使用putParcelableArrayList和putInt在intent中传递的同一个bundle

时间:2013-08-15 13:54:05

标签: java android android-intent bundle

这个错误让我很生气

这是传递参数的代码:

Intent intent = new Intent(this, TheClass.class);
Bundle bundle = new Bundle();
bundle.putInt("int_value",1);
bundle.putParcelableArrayList("USER_ARR",arr);
intent.putExtras(bundle);
startActivity(intent);

arr是ArrayList,User是parcellable

另一方是:

Bundle bundle = this.getIntent().getExtras();
ArrayList<User> users = bundle.getParcelableArrayList("USER_ARR");
int int_value = bundle.getInt("int_value");

我也尝试过以下链接:Problems passing integer and serializable on bundle并且没有捆绑,但仍然无法使其工作 不传递整数,除非它在没有可延迟的数组列表的情况下传递

修改

用户类如下所示:

public class User implements Comparable<User>, Parcelable{

private int user_id;
private String name;
private String status;
private String phone;
private byte[] picture;
private Timestamp last_login;
private boolean is_verified;

public User(int user_id) {
    this.setUserId(user_id);
}


public int getUserId() {
    return user_id;
}

public void setUserId(int user_id) {
    this.user_id = user_id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getPhone() {
    return phone;
}


public void setPhone(String phone) {
    this.phone = phone;
}

public byte[] getPicture() {
    return picture;
}

public void setPicture(byte[] picture) {
    this.picture = picture;
}


public Timestamp getLastLogin() {
    return last_login;
}


public void setLastLogin(Timestamp last_login) {
    this.last_login = last_login;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + user_id;
    return result;
}


@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    User other = (User) obj;
    if (user_id != other.user_id)
        return false;
    return true;
}


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


public static final Parcelable.Creator<User> CREATOR =
        new Parcelable.Creator<User>(){

    @Override
    public User createFromParcel(Parcel source) {
        return new User(source);
    }

    @Override
    public User[] newArray(int size) {
        return new User[size];
    }
};
public User(Parcel source){
    readFromParcel(source);
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(user_id);
    dest.writeString(name);
    dest.writeString(status);
    dest.writeString(phone);
    if (picture != null)
        dest.writeByteArray(picture);
    if (last_login == null)
        dest.writeString(null);
    else 
        dest.writeString(last_login.toString());
}

public void readFromParcel(Parcel source){
    user_id = source.readInt();
    name = source.readString();
    status = source.readString();
    phone = source.readString();
    if (picture != null)
        source.readByteArray(picture);
    String login = source.readString();
    if (login != null)
        last_login = Timestamp.valueOf(login);
    else 
        last_login = null;
}

public boolean contains(CharSequence str, Locale locale) {
    str = ((String)str).toLowerCase(locale);

    String name = this.getName();
    if (name != null)
        name = name.toLowerCase(locale);

    String phone = this.getPhone();
    if (phone != null)
        phone = phone.toLowerCase(locale);

    if (name != null && name.contains(str)) {
        return true;
    }
    if (phone != null && phone.contains(str)) {
        return true;
    }

    return false;
}


@Override
public int compareTo(User another) {
    String name1 = this.getName();
    String name2 = another.getName();

    return name1.compareTo(name2);
}


@Override
public String toString() {
    return "User [user_id=" + user_id + ", name=" + name + ", status="
            + status + ", phone=" + phone + ", last_login=" + last_login
            + ", is_verified=" + is_verified + "]";
}


public boolean getIsVerified() {
    return is_verified;
}


public void setIsVerified(boolean is_verified) {
    this.is_verified = is_verified;
}


}

1 个答案:

答案 0 :(得分:0)

发现发生的事情,这与我提出的一个更新的问题有关,也没有任何答案

问题是:parcelable ArrayList passed partially with null elements

我只是在字节数组的大小大于零的情况下读取了我的parcelable中的字节数组,但是没有读取它没有推进dataPosition()

感谢这个问题Make custom Parcelable containing byte array我找到了答案

每个人都有美好的一天