Java Android:Object.list作为可包裹传递后为空

Java Android:Object.list作为可包裹传递后为空,java,android,list,android-intent,parcelable,Java,Android,List,Android Intent,Parcelable,我对java/android相当陌生。我正试图将实现Parcelable的自定义对象(抽奖)传递给另一个活动 在接收活动中,我可以访问此对象的字符串属性,但列表在某个点上似乎是空的。在第一个活动中向列表.size()敬酒会得到3,但在接收活动中相同的敬酒会得到0 相关代码如下。如果我遗漏了什么,请告诉我 发送活动中的onCLickListener(HomeActivity) raffleListView.setOnItemClickListener(新的OnItemClickListener()

我对java/android相当陌生。我正试图将实现Parcelable的自定义对象(抽奖)传递给另一个活动

在接收活动中,我可以访问此对象的字符串属性,但列表在某个点上似乎是空的。在第一个活动中向列表.size()敬酒会得到3,但在接收活动中相同的敬酒会得到0

相关代码如下。如果我遗漏了什么,请告诉我

发送活动中的onCLickListener(HomeActivity)

raffleListView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共视图单击(适配器视图a、视图v、内部位置、长id){
意向意向=新意向(HomeActivity.this,RafflePurchaseActivity.class);
莱佛士selectedRaffle=(莱佛士)所有莱佛士。获取(位置);
Toast.makeText(getApplicationContext(),“1:+selectedRaffle.Description+”:“+Integer.toString(selectedRaffle.getTicketTiers().size()),Toast.LENGTH_SHORT).show();
//Toast.makeText(getApplicationContext(),“TEST:+Integer.toString(selectedRaffle.ticketiers.size()),Toast.LENGTH\u SHORT.show();
意向。putExtra(“抽奖”,selectedRaffle);
星触觉(意向);
}
});
接收活动(抽奖采购活动)

创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u raffle\u purchase);
Bundle Bundle=this.getIntent().getExtras();
抽奖theRaffle=bundle.getParcelable(“抽奖”);
List xticketTiers=theRaffle.getTicketTiers();
Toast.makeText(getApplicationContext(),“2:+theRaffle.Description+”:“+Integer.toString(xticketTiers.size()),Toast.LENGTH_SHORT).show();
}
抽奖课

public class Raffle implements Parcelable {
public String Title;
public String Description;
public int TicketLimit;
public int numPrizes;
public String prize1;
public String prize2;
public String prize3;
public String prize4;
private List<RaffleTicketTier> ticketTiers = new ArrayList<RaffleTicketTier>();


  public Raffle() {
    Title = "Art Union";
    Description = "THIS IS A RAFFLE DESCRIPTION";

    ticketTiers.add(new RaffleTicketTier(1,10.00));
    ticketTiers.add(new RaffleTicketTier(3,20.00));
    ticketTiers.add(new RaffleTicketTier(8,50.00));
    ticketTiers.add(new RaffleTicketTier(15,100.00));

    testList.add("Test1");
    testList.add("Test2");
    testList.add("Test3");
  }

//================================================================================
// Getters/Setters
//================================================================================

  public List<RaffleTicketTier> getTicketTiers() {
    return ticketTiers;    
  }

//================================================================================
// Parcelable methods
//================================================================================

  //Constructor to use when re-constructing object from a parcel
  public Raffle(Parcel in) { 
    readFromParcel(in);
  }


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

  @Override
  public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(Title);
    dest.writeString(Description);
    dest.writeInt(TicketLimit);
    dest.writeInt(numPrizes);
    dest.writeString(prize1);
    dest.writeString(prize2);
    dest.writeString(prize3);
    dest.writeString(prize4);

  }

  private void readFromParcel(Parcel in) {

    Title= in.readString();
    Description= in.readString();
    TicketLimit= in.readInt();
    numPrizes= in.readInt();
    prize1= in.readString();
    prize2= in.readString();
    prize3= in.readString();
    prize4= in.readString();

  }

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

  public Raffle createFromParcel(Parcel in) {
      return new Raffle(in);
  }

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



}
公共类抽奖实现可包裹{
公共字符串标题;
公共字符串描述;
公共int票证限制;
公共国际货币化;
公共字符串奖1;
公共字符串奖2;
公共字符串奖3;
公共字符串奖4;
private List ticketiers=new ArrayList();
公众抽奖(){
Title=“艺术联盟”;
Description=“这是抽奖说明”;
添加(新的Raffleticketier(1,10.00));
添加(新的Raffleticketier(3,20.00));
增加(新拉弗利蒂克蒂尔(8,50.00));
添加(新的Raffleticketier(15100.00));
添加(“Test1”);
添加(“Test2”);
添加(“Test3”);
}
//================================================================================
//能手/二传手
//================================================================================
公共列表getTicketTiers(){
退票人;
}
//================================================================================
//可分包方法
//================================================================================
//从地块重新构造对象时要使用的构造函数
公众抽奖(包裹内){
从包裹中读取;
}
@凌驾
公共int描述内容(){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共无效writeToParcel(Parcel dest,int标志){
目的书面记录(标题);
目的地记录(说明);
目的地记录(票证限制);
目的写入(numPrizes);
目的地书面资本(prize1);
目的地书面资本(prize2);
目的地书面资本(prize3);
目的地书面资本(prize4);
}
private void readFromParcel(地块位于中){
Title=in.readString();
Description=in.readString();
TicketLimit=in.readInt();
numPrizes=in.readInt();
prize1=in.readString();
prize2=in.readString();
prize3=in.readString();
prize4=in.readString();
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
公共抽奖createFromParcel(包裹中){
返回新的抽奖(in);
}
公共抽奖[]新数组(整数大小){
返回新的奖券[大小];
}
};
}

您似乎没有在包裹上写
售票员。对于自定义类型的包裹数组,类似这样的答案

其他答案的相关代码

public void writeToParcel(Parcel out, int arg1) {
    out.writeInt(mObjList.length);
    out.writeTypedArray(mObjList, arg1);
}

private void readFromParcel(Parcel in) {
    int size = in.readInt();
    mObjList = in.readTypedArray(new MyClass[size], MyClass.CREATOR);
}

哇,真不敢相信我错过了,谢谢。我添加了dest.writeList(ticketiers);现在我得到了“无法封送值”异常。我是否也需要让RaffleticketTiers实现Parecellable?这是我通常的做法。(我认为——不是围绕我的源代码)
public class Raffle implements Parcelable {
public String Title;
public String Description;
public int TicketLimit;
public int numPrizes;
public String prize1;
public String prize2;
public String prize3;
public String prize4;
private List<RaffleTicketTier> ticketTiers = new ArrayList<RaffleTicketTier>();


  public Raffle() {
    Title = "Art Union";
    Description = "THIS IS A RAFFLE DESCRIPTION";

    ticketTiers.add(new RaffleTicketTier(1,10.00));
    ticketTiers.add(new RaffleTicketTier(3,20.00));
    ticketTiers.add(new RaffleTicketTier(8,50.00));
    ticketTiers.add(new RaffleTicketTier(15,100.00));

    testList.add("Test1");
    testList.add("Test2");
    testList.add("Test3");
  }

//================================================================================
// Getters/Setters
//================================================================================

  public List<RaffleTicketTier> getTicketTiers() {
    return ticketTiers;    
  }

//================================================================================
// Parcelable methods
//================================================================================

  //Constructor to use when re-constructing object from a parcel
  public Raffle(Parcel in) { 
    readFromParcel(in);
  }


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

  @Override
  public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(Title);
    dest.writeString(Description);
    dest.writeInt(TicketLimit);
    dest.writeInt(numPrizes);
    dest.writeString(prize1);
    dest.writeString(prize2);
    dest.writeString(prize3);
    dest.writeString(prize4);

  }

  private void readFromParcel(Parcel in) {

    Title= in.readString();
    Description= in.readString();
    TicketLimit= in.readInt();
    numPrizes= in.readInt();
    prize1= in.readString();
    prize2= in.readString();
    prize3= in.readString();
    prize4= in.readString();

  }

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

  public Raffle createFromParcel(Parcel in) {
      return new Raffle(in);
  }

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



}
public void writeToParcel(Parcel out, int arg1) {
    out.writeInt(mObjList.length);
    out.writeTypedArray(mObjList, arg1);
}

private void readFromParcel(Parcel in) {
    int size = in.readInt();
    mObjList = in.readTypedArray(new MyClass[size], MyClass.CREATOR);
}