У меня есть два действия, A и B. Я пытаюсь отправить объект из действия A в действие B. Когда в действии A я вижу, что мой список содержит два элемента, но когда я получаю его в действии B, Список содержит более 7000000 записей.
Вот мой класс Оценки, который реализует Parcelable
и содержит ArrayList<Photo>
, который также должен быть пригоден для продажи.
Оценка POJO:
public class Assessment extends BaseObservable implements Parcelable {
public Assessment(){
}
@SerializedName("Vehicle")
private String vehicle;
@SerializedName("Photos")
private List<Photo> photos;
@Bindable
public String getVehicle() {
return vehicle;
}
public void setVehicle(String vehicle) {
this.vehicle = vehicle;
notifyPropertyChanged(BR.vehicle);
}
public List<Photo> getPhotos() {
return photos;
}
public void setPhotos(List<Photo> photos) {
this.photos = photos;
}
protected Assessment(Parcel in) {
vehicle = in.readString();
photos = new ArrayList<Photo>();
in.readTypedList(photos, Photo.CREATOR);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(vehicle);
dest.writeTypedList(photos);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Assessment> CREATOR = new Parcelable.Creator<Assessment>() {
@Override
public Assessment createFromParcel(Parcel in) {
return new Assessment(in);
}
@Override
public Assessment[] newArray(int size) {
return new Assessment[size];
}
};
}
Фото POJO:
public class Photo implements Parcelable {
public Photo(){
}
@SerializedName("PhotoPath")
private String photoPath;
public String getPhotoPath() {
return photoPath;
}
public void setPhotoPath(String photoPath) {
this.photoPath = photoPath;
}
@SerializedName("Base64PhotoString")
private String photoBase64String;
public String getPhotoBase64String() {
return photoBase64String;
}
public void setPhotoBase64String(String photoBase64String) {
this.photoBase64String = photoBase64String;
}
protected Photo(Parcel in) {
photoPath = in.readString();
photoBase64String = in.readString();
}
//region parelable
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(photoPath);
dest.writeString(photoBase64String);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Photo> CREATOR = new Parcelable.Creator<Photo>() {
@Override
public Photo createFromParcel(Parcel in) {
return new Photo(in);
}
@Override
public Photo[] newArray(int size) {
return new Photo[size];
}
};
//endregion
}
Вот как я могу отправить объект через Intent
из Действия A в Деятельность B:
public void OnAdapterItemClicked(View view){
Intent activityIntent = new Intent(this, com.example.andrewkp.gaassessing.DisplayAssessment.class);
Assessment extraAssessment = getAssessmentFromCollection(view); //extraAssessment.getPhotos().size() == 2
activityIntent.putExtra("assessment", extraAssessment);
startActivity(activityIntent);
}
А вот как я прочитал объект Parcelable
в Деятельности B:
assessment = getIntent().getExtras().getParcelable("assessment");
Я просмотрел следующую статью и точно следую их действиям, но мой список фотографий не сохраняется до Действия B:
Когда я отлаживаю метод readTypedList в классе Parcel, я вижу, что он добавляет 7000000+ записей в мой ArrayList, но никогда не удаляет их. Почему происходит такое поведение?