Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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
Android 在onSavedInstanceState中存储ArrayList_Android_Mobile_Android Listview - Fatal编程技术网

Android 在onSavedInstanceState中存储ArrayList

Android 在onSavedInstanceState中存储ArrayList,android,mobile,android-listview,Android,Mobile,Android Listview,我正在片段类中运行一个asynctask,并用结果填充ListView。但是,我仅在第一次实例化此片段时运行此asynctask 如何将在asynctask中创建的对象的ArrayList存储在onSavedInstance中,以便以后检索它们 我尝试使用putParcelableArrayList,但当我尝试检索它时,仍然得到NullPointerException 谢谢你的帮助 停止: public class Stops implements Parcelable{ privat

我正在片段类中运行一个asynctask,并用结果填充
ListView
。但是,我仅在第一次实例化此片段时运行此asynctask

如何将在asynctask中创建的对象的
ArrayList
存储在
onSavedInstance
中,以便以后检索它们

我尝试使用
putParcelableArrayList
,但当我尝试检索它时,仍然得到
NullPointerException

谢谢你的帮助

停止:

    public class Stops implements Parcelable{

private String station_name;
private ArrayList<Stops> stopTitles;

public Stops()
{

}

public Stops(Parcel source)
{
    station_name = source.readString();
    source.readTypedList(stopTitles, Stops.CREATOR);
}

public String getStation_name() {
    return station_name;
}

public void setStation_name(String station_name) {
    this.station_name = station_name;
}

public void setStopTitles(ArrayList<Stops> stopTitles) {
    this.stopTitles = stopTitles;
}

public ArrayList<Stops> getStopTitles() {
    return stopTitles;
}

@Override
public String toString() {
    return station_name;
}

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int arg1) {
    // TODO Auto-generated method stub
    dest.writeString(station_name);
    dest.writeList(stopTitles);
}

 public static final Parcelable.Creator<Stops> CREATOR = new Parcelable.Creator<Stops>() {

        @Override
        public Stops createFromParcel(Parcel in) {
            return new Stops(in);
        }

        @Override
        public Stops[] newArray(int size) {
            return new Stops[size];
        }
 };
公共类停止实现可包裹{
专用字符串站名;
私人ArrayList stopTitles;
公众站()
{
}
公共站点(包裹来源)
{
station_name=source.readString();
source.readTypedList(stopTitles、Stops.CREATOR);
}
公共字符串getStation_name(){
返回站名称;
}
公共无效设置站点名称(字符串站点名称){
this.station\u name=station\u name;
}
公共无效设置标题(ArrayList停止标题){
this.stopTitles=stopTitles;
}
公共阵列列表getStopTitles(){
返回标题;
}
@凌驾
公共字符串toString(){
返回站名称;
}
@凌驾
公共int描述内容(){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部arg1){
//TODO自动生成的方法存根
目的地记录(车站名称);
目的书面列表(停止标题);
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
@凌驾
公共站点createFromParcel(地块位于){
返回新站点(in);
}
@凌驾
公共站点[]新数组(整数大小){
返回新站点[大小];
}
};

}

您是否对您在ArrayList中持有的对象进行了可包裹的实现?如果对象不可包裹,则无法将列表传递到保存状态下的
onSavedInstance
示例代码:

        public class ParcelableObject implements Parcelable {
        String field;
            @Override
            public int describeContents() {
                return 0;
            }

            @Override
            public void writeToParcel(Parcel dest, int flags) {
                dest.writeValue(field);         
            }

            public static final Parcelable.Creator<ParcelableObject> CREATOR =
                 new Parcelable.Creator<ParcelableObject>() {

                public ParcelableObject createFromParcel(Parcel in) {
                    ParcelableObject obj = new ParcelableObject();
                    obj.readFromParcel(in)
                    return obj;
                }

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

        private void readFromParcel(Parcel in) {
               field = in.readString()
        }
}
公共类ParcelableObject实现了Parcelable{
字符串字段;
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目的写入值(字段);
}
公共静态最终包裹。创建者=
新建Parcelable.Creator(){
公共地块对象createFromParcel(地块中){
ParcelableObject obj=新的ParcelableObject();
对象readFromParcel(in)
返回obj;
}
公共ParcelableObject[]新数组(整数大小){
返回新的ParcelableObject[大小];
}
};
private void readFromParcel(地块位于中){
field=in.readString()
}
}

是的,我已经这样做了。在writeToParcel方法中,这是否正确?列表中存储了什么类型的对象?它们可以打包吗?这是定制物品。我不确定你的意思,如果有parcelable,我仍然在思考parcelable接口,只是今天才开始了解它。我现在开始更了解parcelable接口,但我仍然在了解NullPointerExceptions你的代码是如何处理
stopTitles
以及它包含的对象的。添加了上面的代码,谢谢