这个错误让我很生气
这是传递参数的代码:
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;
}
}
答案 0 :(得分:0)
发现发生的事情,这与我提出的一个更新的问题有关,也没有任何答案
问题是:parcelable ArrayList passed partially with null elements
我只是在字节数组的大小大于零的情况下读取了我的parcelable中的字节数组,但是没有读取它没有推进dataPosition()
感谢这个问题Make custom Parcelable containing byte array我找到了答案
每个人都有美好的一天