在 Android Parcelable Class 中读写长对象
Read and Write Long Object in Android Parcelable Class
如果说我有一个长对象跟随。以下示例是否演示了读写 Long 对象的正确方法?
Class MyClass implements Parcelable {
private Long aLongObject;
public static final Creator<MyClass> CREATOR = new Creator<MyClass>() {
@Override
public MyClass createFromParcel(Parcel in) {
return new MyClass(in);
}
@Override
public MyClass[] newArray(int size) {
.....
}
};
protected MyClass(Parcel in) {// reading Parcel
super(in);
aLongObject = in.readLong(); // correct way to ready Long object?
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeLong(aLongObject); // is this correct way to send Long?
}
}
您的方法的问题是 Long
值可能是 null
但 Parcel
方法只采用/ return 原始数据类型的值 long
,详见documentation。因此,您需要一种解决方法来存储 Long
值。
我喜欢用一个int
来表示我的Long
值是否是null
(你只能存储boolean
数组没有单个boolean
值) 和一个 long
来存储数值(如果不是):
写入 Parcel
int indicator = (aLongObject == null) ? 0 : 1;
long number = (aLongObject == null) ? 0 : aLongObject;
dest.writeInt(indicator);
dest.writeLong(number);
正在阅读 Parcel
// NOTE: reading must be in the same order as writing
Long aLongObject;
int indicator = in.readInt();
long number = in.readLong();
if(indicator == 0){
aLongObject = null;
}
else{
aLongObject = number;
}
您可以简单地使用
写入
dest.writeValue(this.aLongObject);
阅读
this.aLongObject = (Long)in.readValue(Long.class.getClassLoader());
writeValue
和 readValue
优雅地处理 null
。
请参考
如果说我有一个长对象跟随。以下示例是否演示了读写 Long 对象的正确方法?
Class MyClass implements Parcelable {
private Long aLongObject;
public static final Creator<MyClass> CREATOR = new Creator<MyClass>() {
@Override
public MyClass createFromParcel(Parcel in) {
return new MyClass(in);
}
@Override
public MyClass[] newArray(int size) {
.....
}
};
protected MyClass(Parcel in) {// reading Parcel
super(in);
aLongObject = in.readLong(); // correct way to ready Long object?
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeLong(aLongObject); // is this correct way to send Long?
}
}
您的方法的问题是 Long
值可能是 null
但 Parcel
方法只采用/ return 原始数据类型的值 long
,详见documentation。因此,您需要一种解决方法来存储 Long
值。
我喜欢用一个int
来表示我的Long
值是否是null
(你只能存储boolean
数组没有单个boolean
值) 和一个 long
来存储数值(如果不是):
写入 Parcel
int indicator = (aLongObject == null) ? 0 : 1;
long number = (aLongObject == null) ? 0 : aLongObject;
dest.writeInt(indicator);
dest.writeLong(number);
正在阅读 Parcel
// NOTE: reading must be in the same order as writing
Long aLongObject;
int indicator = in.readInt();
long number = in.readLong();
if(indicator == 0){
aLongObject = null;
}
else{
aLongObject = number;
}
您可以简单地使用
写入
dest.writeValue(this.aLongObject);
阅读
this.aLongObject = (Long)in.readValue(Long.class.getClassLoader());
writeValue
和 readValue
优雅地处理 null
。
请参考