Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.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_Android Layout - Fatal编程技术网

Java 如何在活动之间传递自定义类

Java 如何在活动之间传递自定义类,java,android,android-layout,Java,Android,Android Layout,我找到了许多简单的解决方案(例如Intent.putExtra(String,String)和Bundle.putString(String,String)),但这对我的情况没有帮助 我有一个名为MyMP3的类,它包含非基本类型。我需要通过我的MP3的以下 private AudioFile audioFile; private Tag tag; private int index; private boolean saved, startedWithLyrics; private String

我找到了许多简单的解决方案(例如Intent.putExtra(String,String)和Bundle.putString(String,String)),但这对我的情况没有帮助

我有一个名为MyMP3的类,它包含非基本类型。我需要通过我的MP3的以下

private AudioFile audioFile;
private Tag tag;
private int index;
private boolean saved, startedWithLyrics;
private String id3lyrics;
AudioFile和Tag都是我从.jar文件导入的类。我如何通过意向将这些信息传递给其他活动?我尝试为我的“MyMP3”类实现Parcelable,但我不确定在不传递基元类型时如何正确使用这些方法

你能帮我看看下面的代码,并告诉我如何在像我这样的自定义类中正确使用Parcelable吗?如何在writeToParcel函数中设置包裹,以及如何在其他活动中正确检索该类

下面是我的代码(至少是重要的部分)。几天来我一直在尝试不同的事情,但我无法让它发挥作用。请帮帮我

public class MyMP3 extends AudioFile implements Parcelable
{
private AudioFile audioFile;
private Tag tag;
private int index;
private boolean saved, startedWithLyrics;
private String id3lyrics;

public MyMP3(File f, int index)
{
    this.audioFile = AudioFileIO.read(f);
    this.tag = this.audioFile.getTag();
    this.index = index;
    this.saved = false;
    this.id3lyrics = getLyrics();
}

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

@Override
public void writeToParcel(Parcel out, int flats)
{
    /* This method does not work, but I do not know how else to implement it */

    Object objects[] = {this.audioFile, this.tag, this.index, this.saved, this.startedWithLyrics, this.id3lyrics};
    out.writeArray(objects);
}

public static final Parcelable.Creator<MyMP3> CREATOR = new Parcelable.Creator<MyMP3>()
{
    public MyMP3 createFromParcel(Parcel in)
    {
        /* Taken from the Android Developer website */
        return new MyMP3(in);
    }

    public MyMP3[] newArray(int size)
    {
        /* Taken from the Android Developer website */
        return new MyMP3[size];
    }
};

private MyMP3(Parcel in)
{
        /* This method probable needs changed as well */
    Object objects[] = in.readArray(MyMP3.class.getClassLoader());
}
公共类MyMP3扩展音频文件实现可打包
{
私有音频文件;
私人标签;
私有整数索引;
保存私有布尔值,以歌词开始;
私有字符串ID3歌词;
公共MyMP3(文件f,int索引)
{
this.audioFile=AudioFileIO.read(f);
this.tag=this.audioFile.getTag();
这个指数=指数;
this.saved=false;
this.id3lysts=getlysts();
}
@凌驾
公共int描述内容()
{
返回0;
}
@凌驾
公共无效写入包裹(包裹外,内部公寓)
{
/*这个方法不起作用,但我不知道如何实现它*/
Object objects[]={this.audioFile,this.tag,this.index,this.saved,this.startedwithlysts,this.id3lysts};
out.writeArray(对象);
}
public static final Parcelable.Creator=新建Parcelable.Creator()
{
公共MyMP3 createFromParcel(包裹中)
{
/*摘自Android开发者网站*/
返回新的MyMP3(in);
}
公共MyMP3[]新数组(整数大小)
{
/*摘自Android开发者网站*/
返回新的MyMP3[大小];
}
};
私人MyMP3(包裹内)
{
/*这种方法可能也需要改变*/
Object objects[]=in.readArray(MyMP3.class.getClassLoader());
}

}

你可以像这样把你的MyMP3类包裹起来。确保读/写顺序正确。非原语也必须是可包裹的,因此您可能无法控制这一点。或者,您也可以提出自己的序列化/反序列化。您可以使用文本格式,如JSON或XML。另一种选择是使用子类应用程序(确保在清单中声明它),并将其用作挂起跨活动的对象的位置。这会在应用程序的生命周期中将对象保留在内存中,因此请小心操作。

是否为AudioFile/Tag primitive的成员?如果是这样,您也许可以在项目中扩展AudioFile和标记,并为这些对象实现parcelable,然后在主项目中使用它们。