2015-08-28 1 views
0

Один из моих классов имеет 3 свойства ArrayList, как это:ArrayList <String> нуль при создании Parcel

public class Product implements Parcelable{ 

// other properties 

private ArrayList<String> categoryIds; 
private ArrayList<String> categorySlugs; 
private ArrayList<String> categoryNames; 

public Product(){} 

// getters and setters 

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

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    // writing other properties 
    dest.writeStringList(categoryIds); // here aren't null 
    dest.writeStringList(categorySlugs); 
    dest.writeStringList(categoryNames); 
} 

public static final Parcelable.Creator<Product> CREATOR = new Parcelable.Creator<Product>() { 
    public Product createFromParcel(Parcel pc) { 
     return new Product(pc); 
    } 
    public Product[] newArray(int size) { 
     return new Product[size]; 
    } 
}; 

public Product(Parcel in){ 

    // reading other properties, all correct 

    in.readStringList(categoryIds); // from here are all null 
    in.readStringList(categorySlugs); 
    in.readStringList(categoryNames); 
} 

}

Прочитайте комментарии в конструкторе Пакета. Эти три имеют значение null, но в функции «writeToParcel» они не равны нулю. Все остальные свойства верны. Что мне здесь не хватает?

Thanks :)

+2

Вы никогда не экземпляр списка для создания экземпляра. Вам нужно 'private ArrayList categoryIds = new ArrayList ()'; «Новый ArrayList ()' является решающей частью, так как здесь вы создаете экземпляр объекта. – TEK

+0

Это первый раз, когда я использую ArrayList в пакете. До сих пор у меня также был собственный массив классов: ArrayList и не нужно создавать экземпляр. Но ты совершенно прав, это сработало, спасибо! если вы опубликуете его в качестве ответа, я его приму. – AlbertoGarrido

+0

Готово. Рад, что я мог бы помочь в некотором роде. :) – TEK

ответ

0

Вы никогда не создаете экземпляр списка, чтобы создать экземпляр.

Например, вам нужно:

private ArrayList<String> categoryIds = new ArrayList<String>();

new ArrayList<String>() является важной частью, как это, где вы создаете экземпляр объекта.

Еще лучше, постройте эти списки в конструкторе продукта. Также рассмотрите также coding to interface.

0

Используйте ниже код для чтения списков:

categoryIds = in.createStringArrayList() 
Смежные вопросы