2015-08-04 4 views
0

Я пытаюсь передать список категорий из Деятельности в другой. Я реализовал Parcelable в классе, но каждый раз он разбивает приложение. Примечание: действие работает, когда вы не передаете это дополнительно. Примечание 2: Я не могу видеть журнал, просто так медленно и внезапно "D/AndroidRuntime: Выключение ВМ"Parcelable, содержащий ArrayList самого себя

Это пакет:

public class Category implements Parcelable{ 

private String categoryId; 
private String name; 
private boolean active; 
private String slug; 
private String externalId; 
private String parentId; 
private Integer level; 
private String categoryTreeNodeId; 
private ArrayList<Category> children; 


public Category() {} 

// Getters and Setters... 

@Override 
public int describeContents() { 
    // ignore for now 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(categoryId); 
    dest.writeString(name); 
    dest.writeByte((byte) (active ? 1 : 0)); 
    dest.writeString(slug); 
    dest.writeString(externalId); 
    dest.writeString(parentId); 
    dest.writeInt(level); 
    dest.writeString(categoryTreeNodeId); 
    dest.writeTypedList(children); 
} 

/** Static field used to regenerate object, individually or as arrays */ 
public static final Parcelable.Creator<Category> CREATOR = new Parcelable.Creator<Category>() { 
    public Category createFromParcel(Parcel pc) { 
     return new Category(pc); 
    } 
    public Category[] newArray(int size) { 
     return new Category[size]; 
    } 
}; 

/**Ctor from Parcel, reads back fields IN THE ORDER they were written */ 
public Category(Parcel in){ 
    categoryId = in.readString(); 
    name = in.readString(); 
    active = in.readByte() != 0; 
    slug = in.readString(); 
    externalId = in.readString(); 
    parentId = in.readString(); 
    level = in.readInt(); 
    categoryTreeNodeId = in.readString(); 
    in.readTypedList(children, Category.CREATOR); 
} 

}

Это как Я называю активность:

ArrayList<Category> list = currentCategory.getChildren(); 
    intent.putParcelableArrayListExtra(SubCategoryActivity.EXTRA_CATEGORY_LIST, list); 
    intent.putExtra(SubCategoryActivity.EXTRA_CURRENT_CAT_NAME, currentCategory.getName()); 
    context.startActivity(intent); 

EXTRA_CURRENT_CAT_NAME это просто строка, и это прекрасно работает.

Я считаю, что проблема в ArrayList. Любые советы или опыты, делающие что-то подобное?

Спасибо.

Единственный журнал, я получаю:

08-04 17: 56: 21,529 30543-30543/com.example.test D/AndroidRuntime: Выключение VM 08-04 17: 56: 41,554 30543-30552/com.example.test I/искусство: резьба [5, TID = 30552, WaitingInMainSignalCatcherLoop, резьба * = 0xb81e22d0, равный = 0x12c00080, "Сигнал пропасть"]: реагирует на сигнал 3 08-04 17:56: 41.554 30543-30552/com.example.test I/art: [08-04 17: 56: 41.754 787: 809 I/Process] Сигнал отправки. PID: 787 SIG: 3

+1

Можете ли вы опубликовать трассировку стека? Возможно, ошибка не там, где вы думаете. С первого взгляда реализация выглядит отлично. – kcoppock

+0

@kcoppock См. Обновленный, но там немного ... Я был до того, как исполнил действие, и есть только это. – AlbertoGarrido

ответ

1

Ваша проблема вызвана чтением напечатанный список в нуль контейнер:

in.readTypedList(children, Category.CREATOR); 

Это немного сбивает с толку, но использование случае readTypedList требует, чтобы параметр List прошел in будет непустым. Я хотел бы предложить изменения этого использовать:

children = in.createTypedArrayList(Category.CREATOR); 

Это также будет поддерживать нулевое значение, если список пустой в то время, что она написана на земельный участок.

+0

Это сработало! Спасибо! – AlbertoGarrido

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

  • Нет связанных вопросов^_^