2

このエラーは私を怒らせています

これは、パラメーターを渡すコードです。

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");

私もこのリンクに従ってみまし:

編集:

ユーザークラスは次のようになります。

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;
}


}
4

1 に答える 1

0

何が起こったのかわかりました。それは私が尋ねた新しい質問に関連していましたが、それにも答えはありませんでした

問題は:パーセル可能な ArrayList が null 要素で部分的に渡される

バイト配列のサイズがゼロより大きい場合にのみ、パーセルブル内のバイト配列を読み取っていましたが、それを読み取らないと dataPosition() が進みませんでした

この質問のおかげで、バイト配列を含むカスタム Parcelable を作成します 答えを見つけました

皆さん、素晴らしい一日を

于 2013-08-29T08:20:10.237 に答える