Android 在onSavedInstanceState中存储ArrayList
我正在片段类中运行一个asynctask,并用结果填充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
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
以及它包含的对象的。添加了上面的代码,谢谢