2016-12-26 6 views
0

Я пытаюсь передать массив объектов из одной активности в другую деятельность, используя разборчивую. Здесь я столкнулся с этой проблемой класс не найден, когда демаршаллизации:Класс не найден при разборке: Parcelable (Android)

Первая активность Код

intent.setExtrasClassLoader(MenueItemDetails.class.getClassLoader()); 
    intent.putExtra("menue",myArray); 

Вторая активность Код

myArray = (MenueItemDetails[])getIntent().getParcelableArrayExtra("menue"); 

это мой класс, который является parceable

public class MenueItemDetails implements Parcelable { 

private int id = 0, menueId = 0, type = 0, typeId = 0, styleId = 0, lineBefore = 0; 
private String webSite = "", title = "", icon = ""; 


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

// write your object's data to the passed-in Parcel 
@Override 
public void writeToParcel(Parcel out, int flags) { 
    out.writeInt(id); 
    out.writeInt(menueId); 
    out.writeInt(type); 
    out.writeInt(typeId); 
    out.writeInt(styleId); 
    out.writeInt(lineBefore); 
    out.writeString(webSite); 
    out.writeString(title); 
    out.writeString(icon); 
} 
private MenueItemDetails(Parcel in) { 
    id = in.readInt(); 
    menueId = in.readInt(); 
    type = in.readInt(); 
    typeId = in.readInt(); 
    styleId= in.readInt(); 
    lineBefore= in.readInt(); 
    webSite=in.readString(); 
    title= in.readString(); 
    icon=in.readString(); 
} 
public MenueItemDetails() { 
    id = 0; 
    menueId = 0; 
    type = 0; 
    styleId= 0; 
    lineBefore= 0; 
    webSite=""; 
    title= ""; 
    icon=""; 
} 

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

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

public int getLineBefore() { 
    return lineBefore; 
} 

public void setLineBefore(int lineBefore) { 
    this.lineBefore = lineBefore; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public void setMenueId(int menueId) { 
    this.menueId = menueId; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public void setIcon(String icon) { 
    this.icon = icon; 
} 

public void setType(int type) { 
    this.type = type; 
} 

public void setTypeId(int typeId) { 
    this.typeId = typeId; 
} 

public void setStyleId(int styleId) { 
    this.styleId = styleId; 
} 

public int getId() { 
    return id; 
} 

public String getWebSite() { 
    return webSite; 
} 

public void setWebSite(String webSite) { 
    this.webSite = webSite; 
} 

public int getMenueId() { 
    return menueId; 
} 

public String getTitle() { 
    return title; 
} 

public String getIcon() { 
    return icon; 
} 

public int getType() { 
    return type; 
} 

public int getTypeId() { 
    return typeId; 
} 

public int getStyleId() { 
    return styleId; 
} 

}

ответ

1

Ваш второй активности должен быть таким:

Intent intent = getIntent(); 
intent.setExtrasClassLoader(MenueItemDetails.class.getClassLoader()); 
myArray = (MenueItemDetails[]) intent.getParcelableArrayExtra("menue"); 
1

Если ваша задача данных переходить от деятельности к деятельности или фрагмента

чем вместо использования Parcelable вы можете использовать Serializable объект и передать его в намерении его принять очень меньше времени для реализации и кода, чем Parcelable

https://stackoverflow.com/a/39631604/4741746

реализации сериализации в классе

 public class Place implements Serializable{ 
     private int id; 
     private String name; 

     public void setId(int id) { 
      this.id = id; 
     } 
     public int getId() { 
      return id; 
     } 
     public String getName() { 
      return name; 
     } 

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

Затем вы можете передать этот объект в умысле

 Intent intent = new Intent(this, SecondAct.class); 
    intent.putExtra("PLACE", Place); 
    startActivity(); 

ИНТЕ второй активности вы можете получить данные, как этого

 Place place= (Place) getIntent().getSerializableExtra("PLACE"); 
1

Вашего код, чтобы передать ArrayList в первом коде деятельности не является правильным . Отправьте администратору в свою деятельность, как показано ниже:

Первый вид деятельности

intent.setExtrasClassLoader(MenueItemDetails.class.getClassLoader()); 
       intent.putParcelableArrayListExtra("menue",myArray); 

И получить архаист, как показано ниже во второй деятельности.

Второй активность Код

ArrayList<MenueItemDetails> myarray=getIntent().getParcelableArrayListExtra("menue"); 

Проблема с кодом является то, что он используется для отправки и получения одного объекта, а не arraylist.If вы все еще есть проблемы в использовании Parceable объект, убедитесь, используйте Android Parseable Code generator плагин для Android Studio.

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