Android Parcelable对象生成:ParcelableGenerator

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;

@Parcelable
public 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));
时间: 2024-10-23 12:26:59

Android Parcelable对象生成:ParcelableGenerator的相关文章

Android 序列化对象接口Parcelable使用方法

什么是Parcelable ? Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口.一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为"可打包的"了. Parcelable 传递对象 Android序列化对象主要有两种方法: 1.实现Serializable接口,实现Serializable接口是JavaSE本身就支持的; 2.实现Parcelable接口,Parcelable是Android特有的功能,效率比

Android使用DOM生成和输出XML格式数据

Android使用DOM生成和输出XML格式数据 本文主要简单讲解如何使用DOM生成和输出XML数据. 1. 生成和输出XML数据 代码及注释如下: try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); //创建一个新的Document对象,并非获取 Document xmlDocume

Android Application 对象介绍

What is Application Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息.通常我们是不需要指定一个Application的,这时系统会自动帮我们创建,如果需要创建自己 的Application,也很简单创建一个类继承 Application并在manifest的application标签中进行注册(只需要给Application标签增加个na

Android first---xml文件生成与解析

一.使用append进行xml生成 Message类属性:private String body;        private String date;       private String address;       private String type; public class MainActivity extends Activity { List<Message> smsList;    @Override    protected void onCreate(Bundle

(android)Parcelable接口的使用

什么是Parcelable ? Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口.一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为"可打包的"了. Parcelable 传递对象 Android序列化对象主要有两种方法: 1.实现Serializable接口,实现Serializable接口是JavaSE本身就支持的; 2.实现Parcelable接口,Parcelable是Android特有的功能,效率比

【转】Android Application 对象介绍

What is Application Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息.通常我们是不需要指定一个Application的,这时系统会自动帮我们创建,如果需要创建自己 的Application,也很简单创建一个类继承 Application并在manifest的application标签中进行注册(只需要给Application标签增加个na

Javascript 面向对象一:封装数据个方法,从原型对象生成实例

一. 生成对象的原始模式 假定我们把猫看成一个对象,它有"名字"和"颜色"两个属性. var Cat = { name : '', color : '' } 现在,我们需要根据这个原型对象的规格(schema),生成两个实例对象. var cat1 = {}; // 创建一个空对象 cat1.name = "大毛"; // 按照原型对象的属性赋值 cat1.color = "黄色"; var cat2 = {}; cat2.n

深入理解Spring AOP之二代理对象生成

深入理解Spring AOP之二代理对象生成 spring代理对象 上一篇博客中讲到了Spring的一些基本概念和初步讲了实现方法,当中提到了动态代理技术,包含JDK动态代理技术和Cglib动态代理 动态代理这部分我有过一篇博客介绍:动态代理,想深入了解的朋友能够看一看,再回想一下,Spring中怎样区分採用JDK动态代理和CGlib动态代理: 假设目标对象的实现类实现了接口.Spring AOP 将会採用 JDK 动态代理来生成 AOP 代理类: 假设目标对象的实现类没有实现接口,Spring

咸蛋系列一●《模板模式构建随机对象生成》2 构思

随机对象生成可以说是随机数生成的一个延伸,在实际使用中,我们可能要生成的不是一个简简单单的数字,而是像数字.大小写字符.中文汉字.算数表达式等. 由于其实现相对简单,取各种随机对象的源码网上也比比皆是,因而貌似也没人做一个通用的.可扩展的随机对象生成. 博主要不是因为闲得蛋疼也是不会想到做这个东西的,好了,言归正传.分析随机对象生成,其要点无外乎三点: 1. 设置随机对象集: 2. 获取一个或多个随机对象: 3. 获取一个或多个不重复随机对象: 在这三点中,后两者算法皆固定,仅设置对象集不同,故