Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Java 如何在中创建地块?_Java_Android - Fatal编程技术网

Java 如何在中创建地块?

Java 如何在中创建地块?,java,android,Java,Android,我有一个叫做MusicFile的类,它的构造函数是: protected MusicFile(Parcel in) { Title = in.readString(); Album = in.readString(); Artist = in.readString(); Path = in.readString(); Genre = in.readString(); Data = in.readStr

我有一个叫做MusicFile的类,它的构造函数是:

protected MusicFile(Parcel in) {
        Title = in.readString();
        Album = in.readString();
        Artist = in.readString();
        Path = in.readString();
        Genre = in.readString();
        Data = in.readString();
        artistID = in.readInt();
        if (in.readByte() == 0) {
            AlbumID = null;
        } else {
            AlbumID = in.readLong();
        }
        albumCover = in.readParcelable(Uri.class.getClassLoader());
    }
但是现在我已经扩展了
Parcelable
,我不能像这样创建一个新的
音乐文件:

MusicFile MusicFile=new MusicFile()

因为它需要在
中包含
地块

现在如何创建新的音乐文件?我尝试了以下方法:

` 地块=新地块()

MusicFile MusicFile=新的MusicFile(包裹); `

然而,这似乎不起作用。我得到以下错误:
“packet(long)”在“android.os.packet”中不是公共的。无法从软件包外部访问


正确的方法是什么?

您可以扩展
Parcelable
并保留默认构造函数

import android.os.Parcel;
import android.os.Parcelable;


public class MusicFile implements Parcelable {

    private Integer id;
    private String title;
    ...

    public MusicFile(Integer id, String title) {
        this.id = id;
        this.title = title;
    }

    public MusicFile(){

    }

    protected MusicFile(Parcel in) {
        id = in.readByte() == 0x00 ? null : in.readInt();
        title = in.readString();
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        if (id == null) {
            dest.writeByte((byte) (0x00));
        } else {
            dest.writeByte((byte) (0x01));
            dest.writeInt(id);
        }
        dest.writeString(title);
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<MusicFile> CREATOR = new Parcelable.Creator<MusicFile>() {
        @Override
        public MusicFile createFromParcel(Parcel in) {
            return new MusicFile(in);
        }

        @Override
        public MusicFile[] newArray(int size) {
            return new MusicFile[size];
        }
    };
}
导入android.os.packet;
导入android.os.Parcelable;
公共类MusicFile实现可包裹{
私有整数id;
私有字符串标题;
...
公共音乐文件(整数id,字符串标题){
this.id=id;
this.title=标题;
}
公共音乐文件(){
}
受保护的音乐文件(包裹中){
id=in.readByte()==0x00?null:in.readInt();
title=in.readString();
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
if(id==null){
目标写入字节((字节)(0x00));
}否则{
目标写入字节((字节)(0x01));
目的地写入(id);
}
目的书面记录(标题);
}
@抑制警告(“未使用”)
public static final Parcelable.Creator=新建Parcelable.Creator(){
@凌驾
公共音乐文件createFromParcel(包裹中){
返回新的音乐文件(in);
}
@凌驾
公共音乐文件[]新数组(整数大小){
返回新的音乐文件[大小];
}
};
}

当您在bundle中传递对象时,类
Parcel
由Android处理,如
bundle.addParcelableExtra(…)
。你不应该试图独自处理这些事情。当您调用
addParcelableExtra()
Android使用这些方法(
writeToParcel
describeContents
,等等)来序列化您的对象,但是完全取决于框架。您应该添加这些方法来帮助Android自动序列化您的对象(并使您免于许多痛苦),但您需要保留标准构造函数、getter/setter等。

您需要为parcelable创建一个空构造函数。您的模型现在应该如下所示:

 public static final Creator<MusicFile> CREATOR = new Creator<MusicFile>() {
    @Override
    public MusicFilecreateFromParcel(Parcel in) {
        return new MusicFile(in);
    }

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

// It's an empty constructor for parcelable 
private MusicFile() {

}

// This constructor is what parcel generates.
protected MusicFile(Parcel in) {
        Title = in.readString();
        Album = in.readString();
        Artist = in.readString();
        Path = in.readString();
        Genre = in.readString();
        Data = in.readString();
        artistID = in.readInt();
        if (in.readByte() == 0) {
            AlbumID = null;
        } else {
            AlbumID = in.readLong();
        }
        albumCover = in.readParcelable(Uri.class.getClassLoader());
    }
public静态最终创建者=新创建者(){
@凌驾
公共音乐文件CreateFromParcel(包裹中){
返回新的音乐文件(in);
}
@凌驾
公共ClassModelInfo[]新数组(整数大小){
返回新的ClassModelInfo[size];
}
};
//它是parcelable的空构造函数
私人音乐文件(){
}
//此构造函数是parcel生成的。
受保护的音乐文件(包裹中){
Title=in.readString();
Album=in.readString();
Artist=in.readString();
Path=in.readString();
Genre=in.readString();
Data=in.readString();
artistID=in.readInt();
如果(in.readByte()==0){
AlbumID=null;
}否则{
AlbumID=in.readLong();
}
albumCover=in.readParcelable(Uri.class.getClassLoader());
}
您可以使用获取
包裹。别忘了做点什么

包裹回收()


用完后。

当然!我忘记了Java可以有多个构造函数