Android Studio 1.2.2 升级中的 Parcelable 实现问题
Issue in Parcelable implementation in Android Studio 1.2.2 Upgrade
我的包裹Class:
public class Category implements Parcelable{
int id;
String name;
Department department;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
dest.writeParcelable(department, 10);
}
public static final Parcelable.Creator<Category> CREATOR = new Parcelable.Creator<Category>() {
public Category createFromParcel(Parcel in) {
return new Category(in);
}
public Category[] newArray(int size) {
return new Category[size];
}
};
public Category(Parcel in){
id=in.readInt();
name=in.readString();
department= in.readParcelable(department.getClass().getClassLoader());
}
当我将类别 class 的对象发送到其他 activity 时,然后 writeToparcel() 和 createFromParcel() 方法被调用,我在
处观察到 NullPointerException
department= in.readParcelable(department.getClass().getClassLoader());
但是在调试时我检查了 writeToParel() 方法 department 对象是否正确存储,但是如何不返回,在 createFromParcel() ,相同的代码在 Android Studio 1.1 中 运行 没问题。
目前我已经改变了我的实现代码:
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
dest.writeParcelable(department, Constants.PARCELABLE_DEPARTMENT);
dest.writeInt(department.getId());
dest.writeString(department.getName());
}
public Category(Parcel in){
id=in.readInt();
name=in.readString();
department=new Department(in.readInt(),in.readString());
}
现在,代码运行良好,但现在我需要创建额外的部门对象,我认为这不是好方法。
有没有人对这个问题有任何解决方案?
department.getClass().getClassLoader()
这就是引发错误的原因。 department == null
而您正在尝试获取它的 class。因此它抛出一个 NPE。
相反,通过 class 对象获取 class 加载程序:
Department.class.getClassLoader()
我的包裹Class:
public class Category implements Parcelable{
int id;
String name;
Department department;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
dest.writeParcelable(department, 10);
}
public static final Parcelable.Creator<Category> CREATOR = new Parcelable.Creator<Category>() {
public Category createFromParcel(Parcel in) {
return new Category(in);
}
public Category[] newArray(int size) {
return new Category[size];
}
};
public Category(Parcel in){
id=in.readInt();
name=in.readString();
department= in.readParcelable(department.getClass().getClassLoader());
}
当我将类别 class 的对象发送到其他 activity 时,然后 writeToparcel() 和 createFromParcel() 方法被调用,我在
处观察到 NullPointerExceptiondepartment= in.readParcelable(department.getClass().getClassLoader());
但是在调试时我检查了 writeToParel() 方法 department 对象是否正确存储,但是如何不返回,在 createFromParcel() ,相同的代码在 Android Studio 1.1 中 运行 没问题。 目前我已经改变了我的实现代码:
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
dest.writeParcelable(department, Constants.PARCELABLE_DEPARTMENT);
dest.writeInt(department.getId());
dest.writeString(department.getName());
}
public Category(Parcel in){
id=in.readInt();
name=in.readString();
department=new Department(in.readInt(),in.readString());
}
现在,代码运行良好,但现在我需要创建额外的部门对象,我认为这不是好方法。
有没有人对这个问题有任何解决方案?
department.getClass().getClassLoader()
这就是引发错误的原因。 department == null
而您正在尝试获取它的 class。因此它抛出一个 NPE。
相反,通过 class 对象获取 class 加载程序:
Department.class.getClassLoader()