将可分配对象传递给意图时丢失信息

时间:2012-12-14 13:02:29

标签: android android-intent parcelable

我想将对象(parcelable)的数组列表传递给intent以便处理它。 arrayList包含3个对象,当我将它传递给下一个intent时,第三个对象是丢失,所以当我尝试通读列表时我有一个空指针

telecharger.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

         recupParcours= new GetParcours(idLangue);
         recupParcours.start();
         try {
            recupParcours.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         for(Parcours parcours: recupParcours.getListeParcours()) 
                System.out.println("Parcours: " + parcours);
         Intent intent = new Intent();
         intent.putParcelableArrayListExtra("listeParcoursADL",recupParcours.getListeParcours());

        intent.setClass(ChoiceLanguage.this,Test.class);

        startActivity(intent);


        }
    });

在logcat中我可以显示

 12-14 13:53:00.395: I/System.out(10884): Parcours: com.dev.entity.Parcours@41d6f130
12-14 13:53:00.395: I/System.out(10884): Parcours: com.dev.entity.Parcours@41e05398
12-14 13:53:00.395: I/System.out(10884): Parcours: com.dev.entity.Parcours@41e07e00

现在在测试班中

public class Test extends Activity {
    @Override
    public void onCreate(Bundle icicle) {

        super.onCreate(icicle);
        setContentView(R.layout.download_parcours);
          ArrayList<Parcours>listeParcours= getIntent().getParcelableArrayListExtra("listeParcoursADL");
         for(Parcours parcours: listeParcours) 
            System.out.println("Parcours: " + parcours);
    }
}

我可以在日志中显示:

    12-14 13:53:12.223: I/System.out(10884): Parcours: com.dev.entity.Parcours@41bf03e8
12-14 13:53:12.223: I/System.out(10884): Parcours: com.dev.entity.Parcours@41ba5310
12-14 13:53:12.223: I/System.out(10884): Parcours: null

我不知道为什么跳过最后一个对象。 此外还有这条线:

 intent.putParcelableArrayListExtra("listeParcoursADL",recupParcours.getListeParcours());

下一个意图需要5秒才能显示,没有它就是瞬间

Parcours代码

package com.dev.entity;

import java.util.ArrayList;

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


public class Parcours  implements Parcelable{

 String parcours_lang_info_name;
 String parcours_lang_info_desc;
 int parcours_id;
 String parcours_image;
 int parcours_map;
 int parcours_realite_augmentee;
 int parcours_qrcode;
 int parcours_visite_manuelle;
 ArrayList<POI> listesPOI;
 public Parcours() {
    super();
    listesPOI= new ArrayList<POI>();
}



 public Parcours(String parcours_lang_info_name, String parcours_lang_info_desc,
        int parcours_id, String parcours_image, int parcours_map,
        ArrayList<POI> listesPOI, int parcours_realite_augmentee,
        int parcours_qrcode, int parcours_visite_manuelle) {
    super();
    this.parcours_lang_info_name = parcours_lang_info_name;
    this.parcours_lang_info_desc = parcours_lang_info_desc;
    this.parcours_id = parcours_id;
    this.parcours_image = parcours_image;
    this.parcours_map = parcours_map;
    this.listesPOI = listesPOI;
    this.parcours_realite_augmentee = parcours_realite_augmentee;
    this.parcours_qrcode = parcours_qrcode;
    this.parcours_visite_manuelle = parcours_visite_manuelle;
}

 public Parcours (Parcel in) {
        this();
        this.parcours_lang_info_name = in.readString();
        this.parcours_lang_info_desc = in.readString();
        this.parcours_id = in.readInt();
        this.parcours_image = in.readString();
        this.parcours_map = in.readInt();
        in.readTypedList(listesPOI,POI.CREATOR);
        this.parcours_realite_augmentee = in.readInt();
        this.parcours_qrcode = in.readInt();
        this.parcours_visite_manuelle = in.readInt();

    }

@Override
    public String toString() {

        /*return "parcours_lang_info_name: "+parcours_lang_info_name+" " + "parcours_lang_info_desc: "+parcours_lang_info_desc+" "
                +"parcours_id: " + parcours_id+" " +"parcours_image: "+parcours_image+" "+"parcours_map: "+parcours_map+" "+"parcours_realite_augmentee: "+ parcours_realite_augmentee+" "
                + "parcours_qrcode: "+ parcours_qrcode+" "+"parcours_visite_manuelle: "+parcours_visite_manuelle+" "+"listesPOI: "+listesPOI+" ";*/
    return super.toString();
    }

public String getParcours_lang_info_name() {
    return parcours_lang_info_name;
}
public void setParcours_lang_info_name(String parcours_lang_info_name) {
    this.parcours_lang_info_name = parcours_lang_info_name;
}
public String getParcours_lang_info_desc() {
    return parcours_lang_info_desc;
}
public void setParcours_lang_info_desc(String parcours_lang_info_desc) {
    this.parcours_lang_info_desc = parcours_lang_info_desc;
}
public int getParcours_id() {
    return parcours_id;
}
public void setParcours_id(int parcours_id) {
    this.parcours_id = parcours_id;
}
public String getParcours_image() {
    return parcours_image;
}
public void setParcours_image(String parcours_image) {
    this.parcours_image = parcours_image;
}
public int getParcours_map() {
    return parcours_map;
}
public void setParcours_map(int parcours_map) {
    this.parcours_map = parcours_map;
}
public int getParcours_realite_augmentee() {
    return parcours_realite_augmentee;
}
public void setParcours_realite_augmentee(int parcours_realite_augmentee) {
    this.parcours_realite_augmentee = parcours_realite_augmentee;
}
public int getParcours_qrcode() {
    return parcours_qrcode;
}
public void setParcours_qrcode(int parcours_qrcode) {
    this.parcours_qrcode = parcours_qrcode;
}
public int getParcours_visite_manuelle() {
    return parcours_visite_manuelle;
}
public void setParcours_visite_manuelle(int parcours_visite_manuelle) {
    this.parcours_visite_manuelle = parcours_visite_manuelle;
}

public ArrayList<POI> getPOI() {
    return listesPOI;
}

public void setPOI(ArrayList<POI> listesPOI) {
    this.listesPOI = listesPOI;
}



public static final Parcelable.Creator<Parcours> CREATOR = new Parcelable.Creator<Parcours>()
{
    @Override
    public Parcours createFromParcel(Parcel source)
    {
        return new Parcours(source);
    }

    @Override
    public Parcours[] newArray(int size)
    {
    return new Parcours[size];
    }
};




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



@Override
public void writeToParcel(Parcel dest, int flags) {

    dest.writeString(parcours_lang_info_name);
    dest.writeString(parcours_lang_info_desc);
    dest.writeInt(parcours_id);
    dest.writeString(parcours_image);
    dest.writeInt(parcours_map);

    dest.writeInt(parcours_realite_augmentee);
    dest.writeInt(parcours_qrcode);
    dest.writeInt(parcours_visite_manuelle);
    dest.writeTypedList(listesPOI);
}


}

非常感谢

1 个答案:

答案 0 :(得分:4)

您不会以与阅读相同的方式撰写包裹:

in.readString();
in.readString();
in.readInt();
in.readString();
in.readInt();

in.readTypedList(listesPOI,POI.CREATOR); <-- Mistmatch from here
in.readInt();
in.readInt();
in.readInt();

dest.writeString();
dest.writeString();
dest.writeInt();
dest.writeString();
dest.writeInt();

dest.writeInt(); <-- Mistmatch from here
dest.writeInt();
dest.writeInt();
dest.writeTypedList();