2011-01-16 6 views
33

मैंने अब तक कई पार्सल करने योग्य उदाहरण देखे हैं, लेकिन किसी कारण से मैं इसे और अधिक जटिल होने पर काम नहीं कर सकता। मेरे पास एक मूवी ऑब्जेक्ट है, जो पार्सेलबल लागू करता है। इस पुस्तक ऑब्जेक्ट में कुछ गुण हैं, जैसे ArrayLists। ReadTypedList को निष्पादित करते समय मेरे ऐप परिणामों को NullPointerException में चला रहा है! मैं यहाँ वास्तव में विचारों के बाहर हूँपार्सलबल ऑब्जेक्ट में आर््रेलिस्ट

public class Movie implements Parcelable{ 
    private int id; 
    private List<Review> reviews 
    private List<String> authors; 

    public Movie() { 
     reviews = new ArrayList<Review>(); 
     authors = new ArrayList<String>(); 
    } 

    public Movie (Parcel in) { 
     readFromParcel(in); 
    } 

    /* getters and setters excluded from code here */ 

    public void writeToParcel(Parcel dest, int flags) { 

     dest.writeInt(id); 
     dest.writeList(reviews); 
     dest.writeStringList(authors); 
    } 

    public static final Parcelable.Creator<Movie> CREATOR = new Parcelable.Creator<Movie>() { 

     public MoviecreateFromParcel(Parcel source) { 
     return new Movie(source); 
     } 

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

    }; 

    /* 
    * Constructor calls read to create object 
    */ 
    private void readFromParcel(Parcel in) { 
     this.id = in.readInt(); 
     in.readTypedList(reviews, Review.CREATOR); /* NULLPOINTER HERE */ 
     in.readStringList(authors); 
    } 
} 

समीक्षा वर्ग:

public class Review implements Parcelable { 
    private int id; 
    private String content; 

    public Review() { 

    } 

    public Review(Parcel in) { 
     readFromParcel(in); 
    } 

    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeInt(id); 
     dest.writeString(content); 
    } 

    public static final Creator<Review> CREATOR = new Creator<Review>() { 

     public Review createFromParcel(Parcel source) { 
     return new Review(source); 
     } 

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

    private void readFromParcel(Parcel in) { 
     this.id = in.readInt(); 
     this.content = in.readString(); 
    } 

} 

मैं अगर किसी को सिर्फ सही रास्ते पर मुझे मिल सकता है बहुत आभारी होंगे, मैं काफी समय का एक सा खर्च किया है इस के लिए खोज रहे हैं!

adnvance वेस्ले

उत्तर

37

reviews और authors धन्यवाद दोनों अशक्त हैं। आपको सबसे पहले ArrayList शुरू करना चाहिए।

public Movie (Parcel in) { 
    this(); 
    readFromParcel(in); 
} 
+1

के साथ लिखा था तुम इतना MUUUUUCH धन्यवाद, मैं इस :-) पर 2 दिन बर्बाद किया। – Wesley

14
javadocs से readTypedList के लिए

:

एक विशेष ऑब्जेक्ट प्रकार कि writeTypedList(List)

साथ लिखा गया था युक्त दिया सूची आइटम में पढ़ें एक तरह से यह करने के लिए श्रृंखला निर्माता है वर्तमान dataPosition() पर

। सूची को उसी ऑब्जेक्ट प्रकार के साथ पहले writeTypedList(List) के माध्यम से लिखा जाना चाहिए था।

आप उन्हें एक सादे

dest.writeList(reviews); 
+0

ओह, मैंने यहां अपना कोड चिपकाने की प्रतिलिपि बनाने से ठीक पहले इसे बदल दिया। मेरी परियोजना में मेरे पास यह टाइप किया गया है, हालांकि इसे ध्यान में रखते हुए धन्यवाद! – Wesley

+0

आपको बहुत बहुत धन्यवाद! मुझे घंटे और घंटे बचाए – CBaker

+0

आप सही हैं। बहुत बहुत धन्यवाद। –

संबंधित मुद्दे