Android 使用可包裹对象传递对象数组
我正在尝试使用Parcelable传递自定义对象的数组。我在搜索中发现了一些类似的讨论。我遵循了这些示例,但找不到对象数组的实现。我的问题是对象在新活动中变为空。 我的实现如下 我的可感知物体Android 使用可包裹对象传递对象数组,android,Android,我正在尝试使用Parcelable传递自定义对象的数组。我在搜索中发现了一些类似的讨论。我遵循了这些示例,但找不到对象数组的实现。我的问题是对象在新活动中变为空。 我的实现如下 我的可感知物体 public class showStatisticsObj implements Parcelable{ public String dt = null; public int totalmiles = 0; public Date date = null; p
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);
但是showstatobjinsplay为空。
怎么了?请帮帮我。我会像明德说的那样尝试改变创造者 接下来,您不需要以下代码,因为您已经有了parcelable数组(showStatisticsObj是parcelable): 最后,您可以从如下捆绑包中获得:
Parcelable[] ps = bundle.getParcelableArrayExtra();
showStatisticsObj[] uri = new showStatisticsObj[ps.length];
System.arraycopy(ps, 0, uri, 0, ps.length);
您传递了Parcelable[],因此必须在捆绑包中搜索Parcelable[],然后将其转换为showStatisticsObj[]。在java中,不能将Parcelable[]强制转换为showStatisticsObj[]
作为对代码的建议,类名应该总是以大写字母开头。因此,不是
showStatisticsObj
,而是showStatisticsObj
,最好实现可序列化的
接口。这比包裹容易
检查此示例:
public class Foo implements Serializable
{
private static final long serialVersionUID = -459713774703414626L;
public String m_sName;
public String m_spass;
public int m_iAge;
public boolean m_bUseAgePremissions;
}
发送
Foo MyObj=new Foo()
Bundle bData=new Bundle();
bData.putSerializable("test", MyObj);
Intent myIntent = ...
myIntent .putExtras(bData);
收到
Bundle bDataReceive = myIntent.getExtras();
Foo MyObj = (Foo)bDataReceive.getSerializable("test");
您是否初始化了showStatObjinDisplay?Android中不支持序列化,如果我们需要使用
putParcelable()
?
public class Foo implements Serializable
{
private static final long serialVersionUID = -459713774703414626L;
public String m_sName;
public String m_spass;
public int m_iAge;
public boolean m_bUseAgePremissions;
}
Foo MyObj=new Foo()
Bundle bData=new Bundle();
bData.putSerializable("test", MyObj);
Intent myIntent = ...
myIntent .putExtras(bData);
Bundle bDataReceive = myIntent.getExtras();
Foo MyObj = (Foo)bDataReceive.getSerializable("test");