gpt4 book ai didi

java - Parcelable 类中的 Parcelable 列表未使用 Parcel.readTypedList 回读

转载 作者:行者123 更新时间:2023-11-29 18:54:27 26 4
gpt4 key购买 nike

我有两个 Activity,A 和 B。我试图将对象从 Activity A 发送到 Activity B。在 Activity A 中,我可以看到我的列表包含两个项目,但是当我在 Activity 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 发送对象的方式从 Activity A 到 Activity 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 的方式 Activity B 中的对象:

assessment = getIntent().getExtras().getParcelable("assessment");

我看过以下 article ,我完全按照他们所做的去做,但我的照片列表不会持续到 Activity B:

当我在 Parcel 类中调试 readTypedList 方法时,我可以看到它向我的 ArrayList 添加了 7000000 多条记录,但从未删除它们。为什么会发生这种行为?

最佳答案

您可以将最多 1MB 的数据放入封装在 Intent 中的 Bundle 中。

Bundle 中发送 PhotoBase64String 时,您会遇到一堆错误。

但是,为了克服这个问题,我建议您将照片的路径/URI 用于您的第二个 Activity 。然后在你的第二个 Activity 中,从该路径读取照片,并执行你想要的操作。

关于java - Parcelable 类中的 Parcelable 列表未使用 Parcel.readTypedList 回读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50192296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com