2016-09-15 51 views
0

在我的Android应用Parcelable对象的列表,我想用IntentSingleGroup列表传递到另一个Activity每个SingleGroup对象包含的SingleImage名单,这里有类SingleImageSingleGroupAndroid的使用意图发送包含另一个Parcelable对象的列表

public class SingleImage implements Parcelable{ 

public String name; 
public int drawableId; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public int getDrawableId() { 
    return drawableId; 
} 

public void setDrawableId(int drawableId) { 
    this.drawableId = drawableId; 
} 

public SingleImage(String name, int drawableId) 
{ 
    this.name = name; 
    this.drawableId = drawableId; 
} 

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

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

private SingleImage(Parcel in) 
{ 
    name = in.readString(); 
    drawableId = in.readInt(); 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(name); 
    dest.writeInt(drawableId); 
} 
} 

这里是SingleGroup类:

public class SingleGroup implements Parcelable{ 
private static final String TAG = "SINGLEGROUP"; 
private ArrayList<SingleImage> images = new ArrayList<SingleImage>(0); 
private String myTitle; 
private String groupDesc; 

public SingleGroup(String mTitle, String desc, ArrayList<SingleImage> imagesList) { 
    this.myTitle = mTitle; 
    this.groupDesc = desc; 
    this.images = imagesList; 
} 

public String getGroupDesc() { 
    return groupDesc; 
} 

public String getMyTitle() { 
    return myTitle; 
} 

public void setMyTitle(String myTitle) { 
    this.myTitle = myTitle; 
} 

public ArrayList<SingleImage> getImages() { 
    return images; 
} 

public void setImages(ArrayList<SingleImage> images) { 
    this.images = images; 
} 

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

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

private SingleGroup(Parcel in) 
{ 
    myTitle = in.readString(); 
    groupDesc = in.readString(); 

    //problem maybe here 
    in.readTypedList(images,SingleImage.CREATOR); 
} 
@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(myTitle); 
    dest.writeString(groupDesc); 

    //problem maybe here 
    dest.writeTypedList(images); 
} 

@Override 
public String toString() { 
    String result = "myTitle "+myTitle+" desc "+ groupDesc + " imagesize "+images.size(); 
    return result; 
} 
} 

它可以调用通过当确定通过Intent, 而当我打电话给通ArrayLlist<SingleGroup>通过Intent我得到错误:

Parcel [email protected]: Unmarshalling unknown type code 3211379 at offset 224

任何想法?在此先感谢

----------------更新----------------
我已将in.readTypedList(images, null);更改为in.readTypedList(images, SingleImage.CREATOR);但它还是行不通。相同的反编组错误

----------------解决问题--------------
感谢凯塔。真正的问题实际上并没有在我的代码中列出。当我传递可以分类的对象时,我还应该包含一些我错过的其他属性。
强烈推荐AS插件Android Parcelable code generator

回答

2

您必须通过SingleImage.CREATOR到方法readTypedList而不是 “空” 值

private SingleGroup(Parcel in) 
{ 
    myTitle = in.readString(); 
    groupDesc = in.readString(); 

    //problem maybe here 
    in.readTypedList(images, SingleImage.CREATOR); 
} 
+0

谢谢,但我想在此之前,同样的错误 –

+0

你可以用插件[安卓Parcelable代码生成器(HTTPS尝试://plugins.jetbrains .com/plugin/7332),然后使用插件为您的parcelable对象生成parcelable代码 –

+0

感谢Keita,问题解决了。 –

0

试试这一个。这就是我总是这样做,它的工作:

private SingleGroup(Parcel in) 
{ 
    myTitle = in.readString(); 
    groupDesc = in.readString(); 

    //problem maybe here 
    in.createTypedArrayList(SingleImage.CREATOR); 
} 
+0

谢谢,但无法正常工作 –

相关问题