gpt4 book ai didi

在 Activity 之间传递时 Android Bundle 损坏了吗?

转载 作者:太空狗 更新时间:2023-10-29 12:50:02 25 4
gpt4 key购买 nike

我试图在两个 Activity 之间传递一个 Parcelable 对象的 ArrayList 加上一个字符串值。这是将数据添加到 Intent 并通过它传递的代码:

Intent intent = new Intent(this, DisplayLotListActivity.class);
Bundle dataBundle = new Bundle();
dataBundle.putParcelableArrayList(DisplayLotListActivity.EXTRA_LOT_ARRAY, lotList);
dataBundle.putString(EXTRA_LOT_NUMBER, lotNumber);
intent.putExtra(DisplayLotListActivity.EXTRA_DATA, dataBundle);
startActivity(intent);

这是我用来从目标 Activity 的 Intent 中获取数据的代码:

Intent intent = getIntent();
Bundle dataBundle = intent.getBundleExtra(EXTRA_DATA);
lotList = dataBundle.getParcelableArrayList(EXTRA_LOT_ARRAY);
lotNumber = dataBundle.getString(LotInquiryActivity.EXTRA_LOT_NUMBER);

当我检查调试器时,数据结构在调用 Activity 之前看起来是正确的,但当我进入目标 Activity 时,数据结构已损坏。特别是 ArrayList 作为 3 个元素,它的大小仍然是 3 个元素,但第二个元素为空。然后在包中有一个额外的额外内容,其中包含带有空键的缺失元素对象。我有调试器前后的图片,但由于反垃圾邮件规则,无法将它们放在帖子中。

之前:http://i.stack.imgur.com/vDipq.png之后:http://i.stack.imgur.com/JqbF7.png

有什么我想念的吗?无论我使用 Bundle 还是将 ArrayList 直接添加到 Intent 中,都会出现此问题。这是在运行 4.0.3 的 Samsung Tab 2 上运行的。这也会发生在 4.0 模拟器上。

[编辑]这是正在使用的 Parcelable 对象(我刚刚将 getter 和 setter 方法留在底部)

public class Lot implements Parcelable{

private String lotn;

private String dsc1;
private String dsc2;
private String litm;
private long itm;
private String locn;
private String mcu;
private String uom1;
private String uom2;
private BigDecimal pqav;
private BigDecimal pqoh;
private BigDecimal sqoh;
private long vend;
private String rlot;
private String ldsc;
private String lots;
private String lot1;
private String lot2;
private String lot3;
private String lotsdsc;
private XMLGregorianCalendar mmej;
private XMLGregorianCalendar ohdj;

public Lot(){

}

public Lot(Parcel source){
lotn = source.readString();
dsc1 = source.readString();
dsc2 = source.readString();
litm = source.readString();
locn = source.readString();
mcu = source.readString();
uom1 = source.readString();
uom2 = source.readString();
itm = source.readLong();
pqav = new BigDecimal(source.readString());
pqoh = new BigDecimal(source.readString());
sqoh = new BigDecimal(source.readString());
vend = source.readLong();
rlot = source.readString();
ldsc = source.readString();
lots = source.readString();
lot1 = source.readString();
lot2 = source.readString();
lot3 = source.readString();
lotsdsc = source.readString();
try{
mmej = DatatypeFactory.newInstance().newXMLGregorianCalendar(source.readString());
}catch (Exception exc){
mmej = null;
}
try{
ohdj = DatatypeFactory.newInstance().newXMLGregorianCalendar(source.readString());
}catch (Exception exc){
ohdj = null;
}
}

public void writeToParcel(Parcel dest, int flags) {
dest.writeString(lotn);
dest.writeString(dsc1);
dest.writeString(dsc2);
dest.writeString(litm);
dest.writeString(locn);
dest.writeString(mcu);
dest.writeString(uom1);
dest.writeString(uom2);
dest.writeLong(itm);
if(pqav != null){
dest.writeString(pqav.toPlainString());
} else {
dest.writeString("0");
}
if(pqoh != null){
dest.writeString(pqoh.toPlainString());
} else {
dest.writeString("0");
}
if(sqoh != null){
dest.writeString(sqoh.toPlainString());
} else {
dest.writeString("0");
}
dest.writeLong(vend);
dest.writeString(rlot);
dest.writeString(ldsc);
dest.writeString(lots);
dest.writeString(lot1);
dest.writeString(lot2);
dest.writeString(lot3);
dest.writeString(lotsdsc);
if(mmej != null){
dest.writeString(mmej.toXMLFormat());
} else {
dest.writeString("");
}
if(ohdj != null){
dest.writeString(ohdj.toXMLFormat());
} else {
dest.writeString("");
}
}

/**
*
*/
public static final Parcelable.Creator<Lot> CREATOR
= new Parcelable.Creator<Lot>() {
public Lot createFromParcel(Parcel in) {
return new Lot(in);
}

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

最佳答案

好吧,对于任何回到这个问题的人,我发现有两个问题,我认为这两个问题结合起来导致了这种行为。这些问题都与我使用的 Parcelable 对象有关,因此感谢 Todd 至少向我指出了这个方向。

首先,我有一个简单的错误,我在 Parcelable 对象的构造函数中错过了 readString() 。所以基本上我是在写出 n 个元素并读入 n - 1 个元素。第二个问题是 Android 没有实现 javax.xml.datatype 库,这意味着 XMLGregorianCalendar 不可用。因为我不需要在客户端使用此类的功能(有一个 Java Web 应用程序与之对话并使用它),所以我只是转换为一个简单的 java.util.Date 对象。

关于在 Activity 之间传递时 Android Bundle 损坏了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13138207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com