2016-09-15 2 views
0

В моем Android приложения, я хочу использовать Intent, чтобы передать список SingleGroup других Activity где каждый SingleGroup объекта содержит список SingleImage, вот класс для SingleImage и SingleGroup:Android Использования Intent, чтобы отправить список объектов Parcelable, которые содержат список другого 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; 
} 
} 

это хорошо работает при вызове передать ArrayList<SingleImage> через Intent, в то время, когда я звонил, чтобы пройти через ArrayLlist<SingleGroup>Intent я получил ошибку:

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

Любая идея? Заранее спасибо

---------------- Update ----------------
Я изменил 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

вы можете попробовать плагин [Android Parcelable генератор кода] (https: //plugins.jetbrains .com/plugin/7332), а затем используйте плагин для генерации произвольного кода для вашего подробного объекта. –

+0

Спасибо, Кейта, проблема решена. –

0

Попробуйте это. Это то, что я всегда делаю и это работает:

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

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

Спасибо, но не работает –

0

ArrayListявляется сериализации. Так что попробуйте эту

public class SingleImage implements Serializable{ .... }

см это: ArrayList Android Documentation

Смежные вопросы