我類ExpenseFB
,它實現Parcelable
之間含有地圖通行證parcelable對象,包含的UserFB
一個Map
(它實現Parcelable
太):
ExpenseFB:活動
public class ExpenseFB implements Parcelable {
private String id;
private String name;
private String description;
private String whopaidID;
private String whopaidName;
private Double amount;
private Map<String, UserFB> partecipants;
// setters and getters...
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(name);
dest.writeString(description);
dest.writeString(whopaidID);
dest.writeString(whopaidName);
dest.writeMap(partecipants);
}
protected ExpenseFB(Parcel in) {
id = in.readString();
name = in.readString();
description = in.readString();
whopaidID = in.readString();
whopaidName = in.readString();
in.readMap(partecipants,UserFB.class.getClassLoader());
}
public static final Creator<ExpenseFB> CREATOR = new Creator<ExpenseFB>() {
@Override
public ExpenseFB createFromParcel(Parcel in) {
return new ExpenseFB(in);
}
@Override
public ExpenseFB[] newArray(int size) {
return new ExpenseFB[size];
}
};
}
UserFB:
public class UserFB implements Parcelable{
private String id;
private String name;
private String email;
private Map<String, GroupFB> groups;
private Map<String, UserFB> friends;
// setters and getters
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(name);
dest.writeString(email);
dest.writeMap(groups);
dest.writeMap(friends);
}
protected UserFB(Parcel in) {
id = in.readString();
name = in.readString();
email = in.readString();
in.readMap(groups,GroupFB.class.getClassLoader());
in.readMap(friends,UserFB.class.getClassLoader());
}
public static final Creator<UserFB> CREATOR = new Creator<UserFB>() {
@Override
public UserFB createFromParcel(Parcel in) {
return new UserFB(in);
}
@Override
public UserFB[] newArray(int size) {
return new UserFB[size];
}
};
}
我想通過添加對象 在兩個活動之間傳遞一個ExpenseFB對象的意圖:
intent.putExtra("id", expenseFB);
時,在調試模式下,我的第二個活動執行getIntent().getParcelableExtra("id")
它引發以下異常時嘗試做方法partecipants
圖:
... Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.put(java.lang.Object, java.lang.Object)' on a null object reference
我看到partecipants
地圖在第一個活動中被填滿了:我認爲問題出在writeMap()方法中。
是否存在標準或更好的方法來傳遞包含Map的Parcelable
對象?
我是否需要調用另一種方法來包裹Map?
我不想使用Serializable
對象,因爲我讀到他們表現更差。
的'Parcel'類已經有一個'writeMap()'和'readMap()'方法來完成這個工作。爲什麼你不使用現有的方法?沒有理由在這裏重新發明輪子。 –