dest.writeParcelable(department, flags);當(dāng)我通過意圖包裹對(duì)象時(shí),這條線導(dǎo)致應(yīng)用程序崩潰。當(dāng)我評(píng)論該行時(shí),應(yīng)用程序會(huì)通過,但當(dāng)然我沒有部門價(jià)值。public class User implements Parcelable { public String id; public String name; public String email; public Department department; // other implementations of Parcelable protected UserVO(Parcel in) { id = in.readString(); name = in.readString(); email = in.readString(); department = in.readParcelable(Department.class.getClassLoader());} @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(id); dest.writeString(name); dest.writeString(email); dest.writeParcelable(department, flags); // crashes }}部門枚舉public enum Department implements Parcelable { SALES("Sales", 1), HR("Human Resources", 2), SHIPPING("Shipping", 3), public final String name; public final int ordinal; Department(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } Department(Parcel in) { name = in.readString(); ordinal = in.readInt(); } public static final Creator<Department> CREATOR = new Creator<Department>() { @Override public Department createFromParcel(Parcel in) { return Department.valueOf(in.readString()); // crash //return new DeptEnum(in); // android studio generated code but has error: enum types may not be instantiated } @Override public Department[] newArray(int size) { return new Department[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeString(name); parcel.writeInt(ordinal); }}錯(cuò)誤沒有枚舉常量 Department.Sales我從這個(gè)答案中得到了幫助return Department.valueOf(in.readString());
1 回答

溫溫醬
TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
您不需要打包序號(hào)。單獨(dú)對(duì)名稱執(zhí)行 valueOf 就可以了
但是,valueOf 的參數(shù)必須與枚舉定義的名稱完全匹配。
例如,這適用于銷售和運(yùn)輸,但不適用于人力資源
Department.valueOf(in.readString().toUpperCase());
您需要的解決方案是循環(huán)并將Department.values()
值的每個(gè)名稱字段與 in.readString() 結(jié)果進(jìn)行比較
如何從 Java 枚舉的 String 值中查找它?
或者您可以像這樣使用序數(shù),盡管您正在復(fù)制序數(shù)信息并且必須保證枚舉具有連續(xù)的數(shù)字
?return?Department.values()[in.readInt()?-?1]
添加回答
舉報(bào)
0/150
提交
取消