Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:如何创建一个实现Parcelable的类,该类包含一个非静态定制类的ArrayList_Android_Parcelable - Fatal编程技术网

Android:如何创建一个实现Parcelable的类,该类包含一个非静态定制类的ArrayList

Android:如何创建一个实现Parcelable的类,该类包含一个非静态定制类的ArrayList,android,parcelable,Android,Parcelable,在我试图使parcelable的类中,有一个较小的类叫做genericSongClass。在较大的类中,有一个genericSongClass的ArrayList。所以我知道我必须使genericSongClass可打包,但如果不使该类保持静态,我就不能给它一个创建者。我有什么办法可以做到这一点吗 在当前的混乱中,我的小班同学: public class genericSongClass implements Parcelable { String songTitle = "";

在我试图使parcelable的类中,有一个较小的类叫做genericSongClass。在较大的类中,有一个genericSongClass的ArrayList。所以我知道我必须使genericSongClass可打包,但如果不使该类保持静态,我就不能给它一个创建者。我有什么办法可以做到这一点吗

在当前的混乱中,我的小班同学:

public class genericSongClass implements Parcelable {
        String songTitle = "";
        String songArtist = "";
        String songData = "";
        String songAlbum = "";
        String isChecked = "false";

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

            @Override
            public genericSongClass createFromParcel(Parcel source) {
                return null;
            }

            @Override
            public genericSongClass[] newArray(int size) {
                return null;
            }

        };

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

        @Override
        public void writeToParcel(Parcel dest, int flags) {             
        }
}
public类genericSongClass实现了Parcelable{
字符串songTitle=“”;
弦乐歌手=”;
字符串songData=“”;
弦乐专辑=”;
字符串isChecked=“false”;
public final static Parcelable.Creator=新的Parcelable.Creator(){
@凌驾
公共genericSongClass createFromParcel(地块源){
返回null;
}
@凌驾
公共genericSongClass[]新数组(整数大小){
返回null;
}
};
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效writeToParcel(Parcel dest,int标志){
}
}
我的大类(所有与parcelable相关的方法都在底部,使用parcel的ArrayList和构造函数在顶部):

公共类音乐实现可包裹{
私有静态ArrayList歌曲=null;
光标;
语境;
公共音乐(背景){
this.context=上下文;
}
公共音乐(包裹内){
songs=in.readArrayList(songs,genericSongClass.CREATOR);
}
public void BindAllSongs(){
/**定制拉丝*/
字符串选择=MediaStore.Audio.Media.IS_MUSIC+“!=0”;
最终字符串[]投影=新字符串[]{
MediaStore.Audio.Media.DISPLAY\u名称,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ALBUM};
最终字符串排序器=MediaStore.Audio.AudioColumns.TITLE
+“整理本地化ASC”;
试一试{
//要查询的表的uri
Uri Uri=android.provider.MediaStore.Audio.Media.EXTERNAL\u CONTENT\u Uri;
//查询数据库
cursor=context.getContentResolver().query(uri,
投影、选择、空值、排序器);
如果(光标!=null){
songs=newarraylist(cursor.getCount());
cursor.moveToFirst();
而(!cursor.isAfterLast()){
genericSongClass GSC=新的genericSongClass();
GSC.songtTitle=cursor.getString(0);
GSC.songArtist=cursor.getString(1);
GSC.songData=cursor.getString(2);
GSC.songAlbum=cursor.getString(3);
歌曲添加(GSC);
cursor.moveToNext();
}
}
}捕获(例外情况除外){
}最后{
如果(光标!=null){
cursor.close();
}
}       
}
公共静态对象[]toArray(ArrayList列表){
Object[]toReturn=新对象[list.size()];
对于(int i=0;i

这是我第一次尝试使用Parcelable,欢迎任何帮助!提前谢谢

< P> <强>第一:< /强>考虑以下java约定并重命名<代码> GANGEPONCHORKEYS/<代码> >代码> GANGIONGON</代码>。其余部分将假定您没有更改该名称

第二关:阅读这本关于使用/理解包裹的精彩指南

最后:精确代码的部分或全部解决方案:

genericSongClass
中添加新构造函数:

public genericSongClass(Parcel in) {
    songTitle = in.readString();
    // read in the rest of your values here
}
并添加默认构造函数:

public genericSongClass() {
}
in.readTypedList(songs, genericSongClass.CREATOR);
genericSongClass
中的
CREATOR
应该如下所示:(同时调整
Music
class)

记住,顺序很重要!读取和写入的顺序应该相同

在您的
Mu中
public final static Parcelable.Creator<genericSongClass> CREATOR = new Parcelable.Creator<genericSongClass>() {

    @Override
    public genericSongClass createFromParcel(Parcel source) {
        return new genericSongClass(source);
    }

    @Override
    public genericSongClass[] newArray(int size) {
        return new genericSongClass[size];
    }

};
@Override
public void writeToParcel(Parcel dest, int flags) {   
    dest.writeString(songTitle);
    // write your other values here
}
in.readTypedList(songs, genericSongClass.CREATOR);
dest.writeTypedList(songs);