如何使 class 具有多个整数和字符串 Parcelable?
How to make class with multiple Integers and Strings Parcelable?
我有关注 Class
我想做到 Parcelable
问题是,当我通过 in.createIntArray()
方法从 int[] arraySongIntegers
读取 isHidden and Counter
变量时,我得到一个大小为 0 的空数组,顺便说一句,所有字符串变量都被正确读取了。请告诉我如何将所有变量写入 Parcel
并正确读回。
public class Song implements Parcelable{
public static long firstSongId;
private long id;
private String title ,mimeType, artist , dateAdded ,album;
private int isHidden ,counter; // 0 is false , 1 is true
public Song(Parcel in){
readFromParcel(in);
}
@Override
public void writeToParcel(Parcel dest, int flags) {
int[] arraySongIntegers = new int[2];
arraySongIntegers[0] = isHidden;
arraySongIntegers[1] = counter;
dest.writeIntArray(arraySongIntegers);
dest.writeLong(id);
List<String> l = new ArrayList<>();
l.add(title);
l.add(artist);
l.add(album);
l.add(dateAdded);
dest.writeStringList(l);
}
public void readFromParcel(Parcel in){
id = in.readLong();
int[] arraySongIntegers = in.createIntArray();
isHidden = arraySongIntegers[0];
counter = arraySongIntegers[1];
ArrayList<String> list = in.createStringArrayList();
title = list.get(0);
artist = list.get(1);
album = list.get(2);
dateAdded = list.get(3);
}
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
public Song createFromParcel(Parcel in) {
return new Song(in);
}
public Song[] newArray(int size) {
return new Song[size];
}
};
}
提前致谢。
除了我的评论(没有理由让它成为一个数组)——你需要按照你写的顺序阅读所有的东西。通过首先读取 id,一切都搞砸了。
只需使用这个:
http://www.parcelabler.com
将class名称+变量粘贴到左侧文本区域,单击构建,它将为您生成正确的代码。
例如,如果我有一个名为 myClass 的 class,带有 2 个字符串和 1 个整数,我会将此代码放入纹理中:
public class myClass
{
private String s1;
private String s2;
private int n1;
}
您可以使用 Bundle 将 key/value 对保存到包裹中。为此,请使用 Parcel#writeBundle
方法。如本例所示:
public void writeToParcel(Parcel parcel, int i) {
Bundle data = new Bundle();
data.putInt("id",id);
data.putInt("year",year);
parcel.writeBundle(data);
}
我有关注 Class
我想做到 Parcelable
问题是,当我通过 in.createIntArray()
方法从 int[] arraySongIntegers
读取 isHidden and Counter
变量时,我得到一个大小为 0 的空数组,顺便说一句,所有字符串变量都被正确读取了。请告诉我如何将所有变量写入 Parcel
并正确读回。
public class Song implements Parcelable{
public static long firstSongId;
private long id;
private String title ,mimeType, artist , dateAdded ,album;
private int isHidden ,counter; // 0 is false , 1 is true
public Song(Parcel in){
readFromParcel(in);
}
@Override
public void writeToParcel(Parcel dest, int flags) {
int[] arraySongIntegers = new int[2];
arraySongIntegers[0] = isHidden;
arraySongIntegers[1] = counter;
dest.writeIntArray(arraySongIntegers);
dest.writeLong(id);
List<String> l = new ArrayList<>();
l.add(title);
l.add(artist);
l.add(album);
l.add(dateAdded);
dest.writeStringList(l);
}
public void readFromParcel(Parcel in){
id = in.readLong();
int[] arraySongIntegers = in.createIntArray();
isHidden = arraySongIntegers[0];
counter = arraySongIntegers[1];
ArrayList<String> list = in.createStringArrayList();
title = list.get(0);
artist = list.get(1);
album = list.get(2);
dateAdded = list.get(3);
}
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
public Song createFromParcel(Parcel in) {
return new Song(in);
}
public Song[] newArray(int size) {
return new Song[size];
}
};
}
提前致谢。
除了我的评论(没有理由让它成为一个数组)——你需要按照你写的顺序阅读所有的东西。通过首先读取 id,一切都搞砸了。
只需使用这个: http://www.parcelabler.com
将class名称+变量粘贴到左侧文本区域,单击构建,它将为您生成正确的代码。
例如,如果我有一个名为 myClass 的 class,带有 2 个字符串和 1 个整数,我会将此代码放入纹理中:
public class myClass
{
private String s1;
private String s2;
private int n1;
}
您可以使用 Bundle 将 key/value 对保存到包裹中。为此,请使用 Parcel#writeBundle
方法。如本例所示:
public void writeToParcel(Parcel parcel, int i) {
Bundle data = new Bundle();
data.putInt("id",id);
data.putInt("year",year);
parcel.writeBundle(data);
}