Lớp học của tôi ExpenseFB
, mà thực hiện Parcelable
, chứa một Map
của UserFB
(mà thực hiện Parcelable
quá):
ExpenseFB:đèo đối tượng parcelable chứa đồ giữa Hoạt động
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];
}
};
}
Tôi muốn chuyển đối tượng ExpenseFB giữa hai Hoạt động bằng cách thêm đối tượng ExpenseFB
đến mục đích:
intent.putExtra("id", expenseFB);
Khi nào, trong chế độ gỡ lỗi, tôi thực hiện getIntent().getParcelableExtra("id")
trong hoạt động thứ hai nó làm tăng ngoại lệ sau khi cố gắng để làm phương pháp readMap()
trên partecipants
bản đồ:
... 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
tôi thấy rằng bản đồ partecipants
trong hoạt động đầu tiên được điền: Tôi nghĩ rằng vấn đề nằm trong phương thức writeMap().
Có tồn tại cách tiêu chuẩn hoặc tốt hơn để chuyển đối tượng Parcelable
có chứa Bản đồ không?
Tôi có phải gọi một phương pháp khác để chuyển bưu kiện cho Bản đồ không?
Tôi không muốn sử dụng đối tượng Serializable
vì tôi đọc rằng chúng biểu diễn kém hơn.
Lệnh 'Parcel' lớp đã có phương thức 'writeMap()' và 'readMap()' thực hiện chính xác điều này. Tại sao bạn không sử dụng phương pháp hiện có? Không có lý do gì để phát minh lại bánh xe ở đây. –