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