gpt4 book ai didi

android - 使用 Parcelable 对象传递对象数组

转载 作者:太空狗 更新时间:2023-10-29 14:20:22 27 4
gpt4 key购买 nike

我正在尝试使用 Parcelable 传递自定义对象数组。我在搜索中发现了一些讨论,例如 link .我遵循了这些示例,但找不到对象数组的实现。我的问题是对象在新 Activity 中变为空。我的实现如下。

我的可感知对象

    public class showStatisticsObj implements Parcelable{
public String dt = null;
public int totalmiles = 0;
public Date date = null;

public showStatisticsObj() { ; };

public showStatisticsObj(Parcel in) { readFromParcel(in); }

@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel arg0, int arg1) {
// TODO Auto-generated method stub
arg0.writeString(dt);
arg0.writeInt(totalmiles);
}


public void readFromParcel(Parcel in) {
dt = in.readString();
totalmiles = in.readInt();
}

@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public showStatisticsObj createFromParcel(Parcel in)
{
return new showStatisticsObj(in);
}
public showStatisticsObj[] newArray(int size)
{
return new showStatisticsObj[size];
}
};

}


Parcelable[] passedArray = new Parcelable[totaldifferentDates];
for (int i=0; i<totaldifferentDates; ++i) {
passedArray[i] = showStatObj[i];
}

Intent displayintent = new Intent(this, DisplayStatistics.class);
displayintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
displayintent.putExtra("bundleObj", passedArray);
startActivity(displayintent);

在新 Activity 中,我提取为

    Bundle bundle = getIntent().getExtras();    
showStatObjinDisplay = (showStatisticsObj) bundle.getParcelable("bundleObj");

但是 showStatObjinDisplay 为空。怎么了?请帮助我。

最佳答案

我会像 Minhtdh 说的那样尝试改变 CREATOR。

接下来你不需要下面的代码,因为你已经有了 parcelable 数组(showStatisticsObj 是 Parcelable):

// you don't need following code
Parcelable[] passedArray = new Parcelable[totaldifferentDates];
for (int i=0; i<totaldifferentDates; ++i) {
passedArray[i] = showStatObj[i];
}

所以你只需将 showStatObj 传递给 intent:

Intent displayintent = new Intent(this, DisplayStatistics.class);
displayintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
displayintent.putExtra("bundleObj", showStatObj);
startActivity(displayintent);

最后你像这样从 bundle 中得到它:

Parcelable[] ps = bundle.getParcelableArrayExtra();
showStatisticsObj[] uri = new showStatisticsObj[ps.length];
System.arraycopy(ps, 0, uri, 0, ps.length);

您通过了 Parcelable[],因此必须在 bundle 中搜索 Parcelable[],然后将其转换为 showStatisticsObj[]。在 Java 中,您不能将 Parcelable[] 转换为 showStatisticsObj[]。

作为对您代码的建议,类名应始终以大写字母开头。所以不是 showStatisticsObj,而是 ShowStatisticsObj

关于android - 使用 Parcelable 对象传递对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17629224/

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