有两个课程,相互联系。如果我以这种方式实现Parceable,则问题是出现Stackoverflow异常:
RSSFeed.java
public class RSSFeed implements Parcelable {
private String title;
private String link;
private ArrayList<RSSItem> rssItems;
public RSSFeed() {
rssItems = new ArrayList<RSSItem>();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] { this.title, this.link });
Bundle b = new Bundle();
b.putParcelableArrayList("rssItems", rssItems);
dest.writeBundle(b);
}
public static final Parcelable.Creator<RSSFeed> CREATOR = new Parcelable.Creator<RSSFeed>() {
@Override
public RSSFeed createFromParcel(Parcel in) {
RSSFeed rssFeed = new RSSFeed();
String[] data = new String[2];
in.readStringArray(data);
rssFeed.title = data[0];
rssFeed.link = data[1];
Bundle b = in.readBundle(RSSItem.class.getClassLoader());
rssFeed.rssItems = b.getParcelableArrayList("rssItems");
return rssFeed;
}
@Override
public RSSFeed[] newArray(int size) {
return new RSSFeed[size];
}
};
RSSItem.java
public class RSSItem implements Parcelable {
private RSSFeed feed;
private String title;
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
Bundle b = new Bundle();
b.putParcelable("feed", this.feed);
dest.writeStringArray(new String[] { this.title });
}
public static final Parcelable.Creator<RSSItem> CREATOR = new Parcelable.Creator<RSSItem>() {
@Override
public RSSItem createFromParcel(Parcel in) {
RSSItem rssItem = new RSSItem();
Bundle b = in.readBundle(RSSFeed.class.getClassLoader());
rssItem.feed = b.getParcelable("feed");
String[] dataString = new String[1];
in.readStringArray(dataString);
rssItem.setTitle(dataString[0]);
return rssItem;
}
@Override
public RSSItem[] newArray(int size) {
return new RSSItem[size];
}
};
所以,我认为它会因stackoverflow而崩溃,因为它试图在writeParcel(...)
中传递ArrayList<RSSItems>
writeParcel(...)
中的哪一个试图通过RSSFeed
成员再次然后再次。那么,问题是如何解决Parce这两个类的问题呢?
答案 0 :(得分:1)
您的对象图中有周期。您的RSSFeed
将RSSItem
放入地块,RSSItem
将父RSSFeed
放入地块。不要包含其中一个依赖项来杀死循环。通常,父项关系,即从项目到饲料的关系不应该被分割。