Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Parcelable类不构成可包裹对象_Java_Android_Arraylist_Parcel - Fatal编程技术网

Java Parcelable类不构成可包裹对象

Java Parcelable类不构成可包裹对象,java,android,arraylist,parcel,Java,Android,Arraylist,Parcel,我试图在捆绑包中保存对象的ArrayList(列表shelfItems),以便在下次打开活动时检索它 (该活动从firestore获取信息,我希望每次打开该活动时减少读取并缩短加载时间) 但我得到了这个错误信息: savedInstanceState.putParcelableArrayList("key", shelfItems); “android.os.Bundle”中的putParcelableArrayList(java.lang.String,java.util.ArrayList

我试图在捆绑包中保存对象的ArrayList(列表shelfItems),以便在下次打开活动时检索它

(该活动从firestore获取信息,我希望每次打开该活动时减少读取并缩短加载时间)

但我得到了这个错误信息:

savedInstanceState.putParcelableArrayList("key", shelfItems);
“android.os.Bundle”中的putParcelableArrayList(java.lang.String,java.util.ArrayList)“不能应用于”(java.lang.String,java.util.List)”

这是我的对象类:

import android.os.Parcel;
import android.os.Parcelable;

public class ShelfItem implements Parcelable{


    private String mTitle;
    private String mAuthor;
    private String mThumbnail;
    private long mRating;
    private long mEndDate;
    private long mBeginDate;
    private String mId;
    private long mPages;
    private boolean mVisible;

    //make ShelfItem object
    public ShelfItem(String title, String author, String thumbnail, long rating, long beginDate, long endDate, String id, long pages, boolean visible) {
        mTitle = title;
        mAuthor = author;
        mThumbnail = thumbnail;
        mRating = rating;
        mBeginDate = beginDate;
        mEndDate = endDate;
        mId = id;
        mPages = pages;
        mVisible = visible;
    }


    public String getTitle() {
        return mTitle;
    }

    public String getAuthor() {
        return mAuthor;
    }

    public String getThumbnail() {
        return mThumbnail;
    }

    public long getRating() {
        return mRating;
    }

    public long getBeginDate() {
        return mBeginDate;
    }

    public long getEndDate() {
        return mEndDate;
    }

    public String getId() {
        return mId;
    }

    public long getPages() {
        return mPages;
    }

    public boolean getVisible() {
        return mVisible;
    }


    public ShelfItem(Parcel in) {
        mId = in.readString();
        mTitle = in.readString();
        mAuthor = in.readString();
        mThumbnail = in.readString();
        mBeginDate = in.readLong();
        mEndDate = in.readLong();
        mPages = in.readLong();
        mVisible = in.readByte() != 0;
        mRating = in.readLong();

    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel out, int flags) {
        out.writeString(mId);
        out.writeString(mTitle);
        out.writeString(mAuthor);
        out.writeString(mThumbnail);
        out.writeLong(mBeginDate);
        out.writeLong(mEndDate);
        out.writeLong(mPages);
        out.writeByte((byte) (mVisible ? 1 : 0));
        out.writeLong(mRating);

    }

    public static final Parcelable.Creator<ShelfItem> CREATOR = new Parcelable.Creator<ShelfItem>() {
        public ShelfItem createFromParcel(Parcel in) {
            return new ShelfItem(in);
        }

        public ShelfItem[] newArray(int size) {
            return new ShelfItem[size];
        }
    };

}


在学习Java时,我们被教导在声明变量时使用接口类型(
List
),而不是实现类型(
ArrayList
)。您可能有这样的代码:

List<ShelfItem> shelfItems = new ArrayList<>();
如果您从其他地方获取列表,并且无法控制列表的实现类型,则可以在需要保存时构造一个
新的ArrayList

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    ArrayList<ShelfItem> toSave = new ArrayList<>(shelfItems);
    savedInstanceState.putParcelableArrayList("key", toSave);
}
@覆盖
SaveInstanceState上的公共无效(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
ArrayList toSave=新的ArrayList(shelfItems);
savedInstanceState.putParcelableArrayList(“key”,toSave);
}
ArrayList<ShelfItem> shelfItems = new ArrayList<>();
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    ArrayList<ShelfItem> toSave = new ArrayList<>(shelfItems);
    savedInstanceState.putParcelableArrayList("key", toSave);
}