В моем 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
Спасибо, но я попытался это раньше, та же ошибка –
вы можете попробовать плагин [Android Parcelable генератор кода] (https: //plugins.jetbrains .com/plugin/7332), а затем используйте плагин для генерации произвольного кода для вашего подробного объекта. –
Спасибо, Кейта, проблема решена. –