2014-01-06 29 views
0

我有我的课视频执行Parcelable。我在构造函数上遇到问题,并且给我带来问题的是变量mSource,它是ArrayList<URI>。我把箭头放在给我问题的线上。Implement Parcelable

public class Video implements Parcelable { 
public URI mThumb; 
public ArrayList<URI> mSource; 
public String mTitle; 
public String mSubTitle; 
public String mDescription; 

public Video(final URI thumb, final URI source, final String title, final String subtitle, 
     final String description) { 
    this.mThumb = thumb; 
    this.mSource = new ArrayList<URI>(1); 
    this.mSource.add(source); 
    this.mTitle = title; 
    this.mSubTitle = subtitle; 
    this.mDescription = description; 
} 

public Bundle getAsBundle() { 
    Bundle b = new Bundle(); 
    b.putString("title", mTitle); 
    b.putString("subtitle", mSubTitle); 
    b.putString("description", mDescription); 
    b.putString("thumb", mThumb.toString()); 
    b.putString("source", mSource.get(0).toString()); 
    return b; 
} 

@Override 
public int describeContents() { 
    // TODO Auto-generated method stub 
    return 0; 
} 


@Override 
public void writeToParcel(Parcel out, int arg1) { 
    // TODO Auto-generated method stub 
    out.writeString(mTitle); 
    out.writeString(mSubTitle); 
    out.writeString(mDescription); 
    out.writeString(mThumb.toString()); 
    out.writeString(mSource.get(0).toString()); 
} 

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

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

    private Video(Parcel in) { 
     mTitle = in.readString(); 
     mSubTitle = in.readString(); 
     mDescription = in.readString(); 
     mThumb = new URI(in.readString()); 
     mSource = new ArrayList<URI>(); 
     in.readTypedList(mSource, Video.CREATOR); //<----THIS LINE RIGHT HERE. 
    } 

} 

我试过readList,readTypedList但我不断收到错误,说它不适用于参数(..);有什么建议么?

+0

有一个自动生成的Parcelable插件。只需将它添加到android studio。并且它将通过简单地输入ALT + INSERT来创建parcelable。并从弹出的选择parcelable。 http://stackoverflow.com/a/27656775/3496570 – Nepster

回答

2

out.writeString意味着你不能使用in.readTypedList读回,你需要使用in.readString()

+0

嗨@ njzk2感谢您的答复。所以做mSource.get(0)=新的URI(in.readString())? – aafonso1991

+0

没有。得到是为了获得价值。你可以调用'this.mSource = new ArrayList (1); this.mSource.add(new URI(in.readString()));' – njzk2

+0

您也可能想重新考虑只有1个项目时有源码列表的用处。请注意,您可以使用out.writeTypeList,如readTypedList的文档中所述。 – njzk2