我想将对象从 fragment 传递到 Activity。
这是我的模态类::
import java.util.ArrayList;
import android.os.Parcel;
import android.os.Parcelable;
public class TopupProSectionName
{
private String sectionName;
public ArrayList<Products> topupProductList ;
private TopupProSectionName topupProSectionName;
private TopupProSectionName.Products topupProducts;
public TopupProSectionName(String name, ArrayList<Products> topupProductList)
{
super();
this.sectionName = name;
this.topupProductList = topupProductList;
}
public TopupProSectionName()
{
topupProductList = new ArrayList<Products>();
topupProSectionName=new TopupProSectionName();
topupProducts = topupProSectionName.new Products();
}
public String getsectionName() {
return sectionName;
}
public void setsectionName(String sectionName) {
this.sectionName = sectionName;
}
public ArrayList<Products> getTopupProductList() {
return topupProductList;
}
public void setTopupProductList(ArrayList<Products> topupProductList) {
this.topupProductList = topupProductList;
}
public Products getTopupProducts() {
return topupProducts;
}
public void setTopupProducts(TopupProSectionName.Products tp) {
this.topupProducts = tp;
}
public class Products implements Parcelable
{
String systemServiceID;
String systemServiceName;
String productID;
String productCode;
String productName;
String productDescription;
String productType;
String batchID;
String minValue;
String maxValue;
String ImageURL;
String surchargeType;
String surchargeValue;
public String getSystemServiceID()
{
return systemServiceID;
}
public void setSystemServiceID(String id)
{
this.systemServiceID=id;
}
public String getSystemServiceName()
{
return systemServiceName;
}
public void setSystemServiceName(String name)
{
this.systemServiceName=name;
}
public void setProductDesc(String productDesc)
{
this.productDescription=productDesc;
}
public String getProductDesc()
{
return productDescription;
}
public void setBatchID(String batchID)
{
this.batchID=batchID;
}
public String getBatchID()
{
return batchID;
}
public void setMinValue(String minValue)
{
this.minValue=minValue;
}
public String getminValue()
{
return minValue;
}
public void setMaxValue(String maxValue)
{
this.maxValue=maxValue;
}
public String getMaxValue()
{
return maxValue;
}
public String getProductID()
{
return productID;
}
public void setProductID(String ID)
{
productID=ID;
}
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
public String getProductName()
{
return productName;
}
public void setProductName(String name)
{
productName=name;
}
public String getProductType()
{
return productType;
}
public void setProductType(String type)
{
productType=type;
}
public String getImageURL()
{
return ImageURL;
}
public void setImageURL(String ImageURL)
{
this.ImageURL=ImageURL;
}
public String getSurchargeValue() {
return surchargeValue;
}
public void setSurchargeValue(String surchargeValue) {
this.surchargeValue = surchargeValue;
}
public String getSurchargeType() {
return surchargeType;
}
public void setSurchargeType(String surchargeType) {
this.surchargeType = surchargeType;
}
private Products(Parcel in) {
topupProducts.setSystemServiceID(in.readString());
topupProducts.setSystemServiceName(in.readString());
topupProducts.setProductID(in.readString());
topupProducts.setProductCode(in.readString());
topupProducts.setProductDesc(in.readString());
topupProducts.setProductName(in.readString());
topupProducts.setProductDesc(in.readString());
topupProducts.setProductType(in.readString());
topupProducts.setBatchID(in.readString());
topupProducts.setMinValue(in.readString());
topupProducts.setMaxValue(in.readString());
topupProducts.setImageURL(in.readString());
topupProducts.setSurchargeType(in.readString());
topupProducts.setSurchargeValue(in.readString());
}
public Products() {
// TODO Auto-generated constructor stub
}
/*
* you can use hashCode() here.
*/
@Override
public int describeContents() {
return 0;
}
/*
* Actual object Serialization/flattening happens here. You need to
* individually Parcel each property of your object.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(topupProducts.getSystemServiceID());
parcel.writeString(topupProducts.getSystemServiceName());
parcel.writeString(topupProducts.getProductID());
parcel.writeString(topupProducts.getProductCode());
parcel.writeString(topupProducts.getProductName());
parcel.writeString(topupProducts.getProductDesc());
parcel.writeString(topupProducts.getProductType());
parcel.writeString(topupProducts.getBatchID());
parcel.writeString(topupProducts.getminValue());
parcel.writeString(topupProducts.getMaxValue());
parcel.writeString(topupProducts.getImageURL());
parcel.writeString(topupProducts.getSurchargeType());
parcel.writeString(topupProducts.getSurchargeValue());
}
/*
* Parcelable interface must also have a static field called CREATOR,
* which is an object implementing the Parcelable.Creator interface.
* Used to un-marshal or de-serialize object from Parcel.
*/
public final Parcelable.Creator<TopupProSectionName.Products> CREATOR =
new Parcelable.Creator<TopupProSectionName.Products>() {
public TopupProSectionName.Products createFromParcel(Parcel in) {
return new TopupProSectionName.Products(in);
}
public TopupProSectionName.Products[] newArray(int size) {
return new TopupProSectionName.Products[size];
}
};
}
}
我传递的对象是这样的::
TopupProSectionName topupProSecName=new TopupProSectionName();
TopupProSectionName.Products Pro=topupProSecName.new Products();
Pro=listDataHeader.get(groupPosition).getTopupProducts();
startActivityForResult(new Intent(ctx,TopupDialogActivity.class).putExtra("Product",Pro), 11);
在 Activity 中接收::
Products=(TopupProSectionName.Products) getIntent().getParcelableExtra("Product");
逻辑猫::
12-09 14:18:47.374: E/AndroidRuntime(28956): FATAL EXCEPTION: main
12-09 14:18:47.374: E/AndroidRuntime(28956): java.lang.StackOverflowError
12-09 14:18:47.374: E/AndroidRuntime(28956): at java.util.AbstractList.<init>(AbstractList.java:383)
12-09 14:18:47.374: E/AndroidRuntime(28956): at java.util.ArrayList.<init>(ArrayList.java:90)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:24)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectionName.java:25)
12-09 14:18:47.374: E/AndroidRuntime(28956): at com.mobifin.subscriber.modal.TopupProSectionName.<init>(TopupProSectio
知道为什么这个实现出错了吗?
任何帮助/建议将不胜感激...
提前致谢...
最佳答案
不要在 TopupProSectionName 类的构造函数中实例化 TopupProSectionName 字段。如果是这样,它将创建无限对象,因为每个 TopupProSectionName 对象将再次包含 TopupProSectionName...使用 setter 和 getter 方法将值赋给 TopupProSectionName 字段,Products 类中的 CREATOR 字段必须是静态的...
试试这个……它是不言自明的……
public class TopupProSectionName {
private String sectionName;
public ArrayList<Products> topupProductList;
private TopupProSectionName topupProSectionName;
private TopupProSectionName.Products topupProducts;
public TopupProSectionName(String name, ArrayList<Products> topupProductList) {
super();
this.sectionName = name;
this.topupProductList = topupProductList;
}
public TopupProSectionName() {
topupProductList = new ArrayList<Products>();
topupProducts = new TopupProSectionName.Products();
}
public String getsectionName() {
return sectionName;
}
public void setsectionName(String sectionName) {
this.sectionName = sectionName;
}
public ArrayList<Products> getTopupProductList() {
return topupProductList;
}
public void setTopupProductList(ArrayList<Products> topupProductList) {
this.topupProductList = topupProductList;
}
public Products getTopupProducts() {
return topupProducts;
}
public void setTopupProducts(TopupProSectionName.Products tp) {
this.topupProducts = tp;
}
public TopupProSectionName getTopupProSectionName() {
return topupProSectionName;
}
public void setTopupProSectionName(TopupProSectionName topupProSectionName) {
this.topupProSectionName = topupProSectionName;
}
public static class Products implements Parcelable {
String systemServiceID;
String systemServiceName;
String productID;
String productCode;
String productName;
String productDescription;
String productType;
String batchID;
String minValue;
String maxValue;
String ImageURL;
String surchargeType;
String surchargeValue;
public String getSystemServiceID() {
return systemServiceID;
}
public void setSystemServiceID(String id) {
this.systemServiceID = id;
}
public String getSystemServiceName() {
return systemServiceName;
}
public void setSystemServiceName(String name) {
this.systemServiceName = name;
}
public void setProductDesc(String productDesc) {
this.productDescription = productDesc;
}
public String getProductDesc() {
return productDescription;
}
public void setBatchID(String batchID) {
this.batchID = batchID;
}
public String getBatchID() {
return batchID;
}
public void setMinValue(String minValue) {
this.minValue = minValue;
}
public String getminValue() {
return minValue;
}
public void setMaxValue(String maxValue) {
this.maxValue = maxValue;
}
public String getMaxValue() {
return maxValue;
}
public String getProductID() {
return productID;
}
public void setProductID(String ID) {
productID = ID;
}
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
public String getProductName() {
return productName;
}
public void setProductName(String name) {
productName = name;
}
public String getProductType() {
return productType;
}
public void setProductType(String type) {
productType = type;
}
public String getImageURL() {
return ImageURL;
}
public void setImageURL(String ImageURL) {
this.ImageURL = ImageURL;
}
public String getSurchargeValue() {
return surchargeValue;
}
public void setSurchargeValue(String surchargeValue) {
this.surchargeValue = surchargeValue;
}
public String getSurchargeType() {
return surchargeType;
}
public void setSurchargeType(String surchargeType) {
this.surchargeType = surchargeType;
}
private Products(Parcel in) {
setSystemServiceID(in.readString());
setSystemServiceName(in.readString());
setProductID(in.readString());
setProductCode(in.readString());
setProductDesc(in.readString());
setProductName(in.readString());
setProductDesc(in.readString());
setProductType(in.readString());
setBatchID(in.readString());
setMinValue(in.readString());
setMaxValue(in.readString());
setImageURL(in.readString());
setSurchargeType(in.readString());
setSurchargeValue(in.readString());
}
public Products() {
// TODO Auto-generated constructor stub
}
/*
* you can use hashCode() here.
*/
@Override
public int describeContents() {
return 0;
}
/*
* Actual object Serialization/flattening happens here. You need to
* individually Parcel each property of your object.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(getSystemServiceID());
parcel.writeString(getSystemServiceName());
parcel.writeString(getProductID());
parcel.writeString(getProductCode());
parcel.writeString(getProductName());
parcel.writeString(getProductDesc());
parcel.writeString(getProductType());
parcel.writeString(getBatchID());
parcel.writeString(getminValue());
parcel.writeString(getMaxValue());
parcel.writeString(getImageURL());
parcel.writeString(getSurchargeType());
parcel.writeString(getSurchargeValue());
}
/*
* Parcelable interface must also have a static field called CREATOR,
* which is an object implementing the Parcelable.Creator interface.
* Used to un-marshal or de-serialize object from Parcel.
*/
public static final Parcelable.Creator<TopupProSectionName.Products> CREATOR = new Parcelable.Creator<TopupProSectionName.Products>() {
public TopupProSectionName.Products createFromParcel(Parcel in) {
return new TopupProSectionName.Products(in);
}
public TopupProSectionName.Products[] newArray(int size) {
return new TopupProSectionName.Products[size];
}
};
}
}
并像这样为 Product 创建实例......
TopupProSectionName topupProSecName=new TopupProSectionName();
TopupProSectionName.Products Pro=new TopupProSectionName.Products();
Pro=listDataHeader.get(groupPosition).getTopupProducts();
startActivityForResult(new Intent(ctx,TopupDialogActivity.class).putExtra("Product",Pro), 11)
关于android - 自定义模式类中的 Parcelable 抛出 StackOverflow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20467037/