Android Parcelable对象生成:ParcelableGenerator
来源:互联网 发布:网络贷款需要什么手续 编辑:程序博客网 时间:2024/06/05 11:59
github 地址: https://github.com/baoyongzhang/ParcelableGenerator
分析:
该项目是使用了Annotation的编译期注解,即@Retention(RetentionPolicy.CLASS)
同时未使用@Inherited注解,所以在需要序列化的 不管父类是否使用了注解,子类必须加上@Parcelable
如下引用readme.md
ParcelableGenerator
介绍
ParcelableGenerator可以将任意对象转换为Parcelable类型,方便对象传输。
在Android中,对象的序列化一般有两种方式,一种是Serializable,一种是Parcelable。
- Serializable 在Java中就存在,效率较低。
- Parcelable 是Android中提供的,也是官方推荐的方式,效率比Serializable高很多。
虽然Parcelable效率高,但是使用起来比Serializable麻烦很多,很多人不使用Parcelable就是因为写法太麻烦,尤其是属性特别多的时候,我们要将每个属性Parcel.write()然后在Parcel.read()回来,相当繁琐,不如Serializable简单粗暴,直接有效。
ParcelableGenerator可以解决Parcelable使用麻烦的问题,让使用Parcelable的简单性可以和使用Serializable相媲美。
使用方法
例如我们有一个User类,用来保存用户的一些信息,我们需要使用@Parcelable修饰该类,注意@Parcelable修饰的类必须有公有无参构造方法。
import com.baoyz.pg.Parcelable;@Parcelablepublic class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
我们要将一个User对象通过Intent传递给一个Activity叫做ShowUserActivity。我们需要调用Intent.putExtra()方法将对象传入,这时候直接传递肯定是不行的,我们需要调用PG.createParcelable()方法将对象转换为Parcelable在传入Intent中。
import com.baoyz.pg.PG;// 模拟创建对象,并设置属性值 User user = new User();user.setName("zhangsan");user.setAge(18);Intent intent = new Intent(this, ShowUserActivity.class);// 调用PG将对象转换成Parcelable,传入Intent中intent.putExtra("user", PG.convertParcelable(user));startActivity(intent);
在ShowUserActivity中获取User对象,无需写任何转换的代码,直接getIntent().getParcelableExtra()赋值给原对象类型变量即可。
public class ShowUserActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 直接获取原对象类型 User user = getIntent().getParcelableExtra("user"); // 获取属性值 user.getName(); user.getAge(); }}
//上面可能会报错,可以使用如下两种方法
User user = PG.unconvert(intent.getParcelableExtra("user"));// User user = (User) intent.getParcelableExtra("user");
更新介绍
Version 2.0
- 修复BUG,使用基本数据类型包装类会出现问题等。
- 增加 @ParcelIgnore 注解,修饰在Model的Field上面,可以忽略该字段不进行序列化。
- 使用更加方便,当Model中的属性是其他对象,或者List中包含其他对象,该对象的类用 @Parcelable 声明之后无需加转换代码。
// 当传递对象的属性包含其他对象,或者是List,而该对象或List中的对象不支持序列化,那么直接传递将会出现null// 解决办法,将不支持序列化的类用@Parcelable修饰// 例如一个教室对象Classroom room = new Classroom();// 教室中包含一个老师,Teacher类用@Parcelable修饰Teacher teacher = new Teacher("teacherName");// 将老师对象直接赋值给教室room.setTeacher(teacher);// 再例如,教室中包含很多学生,使用List保存,Student类用@Parcelable修饰List<Student> students = new ArrayList<Student>();// 直接创建Student对象添加到List中students.add(new Student("stu1"));students.add(new Student("stu2"));students.add(new Student("stu3"));room.setStudents(students);// 传递教室对象,调用转换方法,此时内部会自动将Teacher、和List中的Student对象转为Parcelable类型并传递intent.putExtra("classroom", PG.convertParcelable(room));
版权声明:本文为博主原创文章,未经博主允许不得转载。
- Android Parcelable对象生成:ParcelableGenerator
- Android Parcelable对象生成:ParcelableGenerator
- ParcelableGenerator将任意对象转化为Parcelable类型
- Android 一键生成Parcelable
- android中自动生成parcelable
- android intent传递Parcelable对象
- android 序列化对象 Parcelable
- Android使用Parcelable传递对象
- android对象实现Parcelable接口
- Android 使用Parcelable传递对象
- Android 对象序列化 Parcelable
- Android AS插件ParcelableGenerator介绍以及使用
- Android Parcelable代码自动生成插件 Parcelable code generator
- android之传递对象(Parcelable,Serializable)
- Android 使用Parcelable序列化对象
- Android 使用Parcelable序列化对象
- Android 使用Parcelable序列化对象
- android之传递对象(Parcelable,Serializable)
- 多线程编程
- LeetCode ZigZag Conversion
- [ios学习] ios自学必备思维导图合集
- cocoaPods:的一些错误整理
- MCU相关基础知识
- Android Parcelable对象生成:ParcelableGenerator
- proc文件系统API
- 浅析Android中的消息机制
- Next select the number of free fifa 16 coins
- 部分算法
- 防止过拟合的几个方法
- LSGO软件技术团队2015~2016学年第二周(0907~0912)总结
- iis下设置默认页
- android studio注意要点及常见错误