HarmonyOS-Sequenceable(序列化)中,URI类型如何实现读取序列化对象
请问HarmonyOS-Sequenceable(序列化)中,URI类型如何实现读取序列化对象。
使用Android-Parcelable(序列化) URI类型反序列化实现方式:
protected Image(Parcel in) {
this.path = in.readString();
this.time = in.readLong();
this.name = in.readString();
this.mimeType = in.readString();
this.uri = in.readParcelable(Uri.class.getClassLoader());
}
HarmonyOS-Parcel中对应的readSequenceable返回布尔类型,无法实现读取序列化对象
HarmonyOS
Parcel
Sequenceable
序列化
readParcelable
赞
收藏 1
回答 3
已解决
相关问题
跨设备迁移FA并传递序列化实体类无反应
2659浏览 • 3回复 待解决
如何根据uri读取文件?
562浏览 • 1回复 待解决
ShapeElement类如何使用ShapeElement(Context context, int xmlId)实例化一个对象
4747浏览 • 1回复 待解决
如何实现鸿蒙和工厂自动化设备的互联互通
4268浏览 • 3回复 待解决
Dev EcoStudio如何格式化代码
638浏览 • 1回复 已解决
如何选择PolarDB迁移类型和迁移对象?
1082浏览 • 1回复 待解决
API9 原子化服务数据持久化的参考文档有哪些?
525浏览 • 1回复 待解决
如何初始化OceanBase服务器环境?
1594浏览 • 1回复 待解决
初始化页面,默认场地不可选交互如何实现,点击选种交互,反选交互?
977浏览 • 1回复 待解决
HarmonyOS中如何用Java实现配音功能
2326浏览 • 1回复 待解决
redis config 持久化怎么设置?
1523浏览 • 1回复 待解决
求问,原子化服务标题栏如何设置?
1160浏览 • 1回复 待解决
原子化服务包含多个hap包该如何开发?
736浏览 • 1回复 待解决
鸿蒙中如何获取context对象
6070浏览 • 1回复 待解决
持久化数据PersistentStorage使用问题求助
4097浏览 • 1回复 待解决
不是受邀企业无法发布原子化服务
6311浏览 • 4回复 待解决
鸿蒙harmony栅格化,适应不同屏幕宽
5827浏览 • 1回复 待解决
JS开发原子化服务半模态的页面如何开发
1741浏览 • 1回复 待解决
polarDB私有化部署怎么做?
1002浏览 • 1回复 待解决
鸿蒙启动时,为什么初始化服务只初始化hiview,bootstrap和broadcast无法启动?
572浏览 • 0回复 待解决
已知相册图片和视频的uri,如何用流读取这些信息,然后将其传送给后端?
3517浏览 • 1回复 待解决
鸿蒙卡片原子化服务和app的关系
8816浏览 • 4回复 待解决
JS构建的项目如何获取系统版本、序列号、处理器信息,原来安卓项目需传的参数。
9868浏览 • 2回复 待解决
如何通过鸿蒙代码判断当前是应该还是一个原子化服务?
726浏览 • 1回复 待解决
编译好的服务卡片如何发布到原子化服务平台(Huawei Ability Gallery)
4895浏览 • 3回复 待解决
可以调用方法readSerializable(),如下图所示:
这段代码运行OK,可以正确传递Student对象到下一个ability。
关键点在红色代码。
import ohos.utils.Parcel;
import ohos.utils.Sequenceable;
import ohos.utils.net.Uri;
public class Student implements Sequenceable {
private int number;
private String name;
private Uri uri;
public Student() {
}
public Student(int number, String name, Uri uri) {
this.number = number;
this.name = name;
this.uri = uri;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Uri getUri() {
return uri;
}
public void setUri(Uri uri) {
this.uri = uri;
}
//上面是传统的实体类的构造函数和getter、setter
//下面是序列化的核心
//向包裹中写入数据,包裹可以理解为一块内存区
public boolean marshalling(Parcel out) {
out.writeTypedSequenceable(this.uri); //注意Uri类型的写法和普通数据类型有所不同
out.writeInt(this.number);
out.writeString(this.name);
return true;
}
//从包裹中读取数据
public boolean unmarshalling(Parcel in) {
this.uri = in.createSequenceable(Uri.class.getClassLoader());
this.number = in.readInt();
this.name = in.readString();
return true; //注意Uri类型的写法和普通数据类型有所不同
}
//序列化对象的内部构造器,必须实现
public static final Sequenceable.Producer PRODUCER = new Producer() {
public Student createFromParcel(Parcel in) { //从包裹中获取数据构造对象
// Initialize an instance first, then do customized unmarshlling.
Student instance = new Student();
instance.unmarshalling(in);
return instance;
} //必须实现Producer
};
}
Boolean b= parcel.readSequenceable(this.uri);
采用这个读取即可,Uri类也是实现了Sequenceable接口的,而readSequenceable方法需要接收一个Sequenceable类型的参数
实现序列化的操作必须要实现一个关键的Sequenceable的内部接口构造器Sequenceable.Producer,如下