Android parcelable 解析

Android App 开发过程中,假设我们需要将String str = "Hanmeimei";,从 Activity A 传递到 Activity B 时,我们可以使用 intent.putExtra(“name”,str ); 这样在 Activity B 中就能获取到由 Activity A 传递过来的字符串 str .那么如果我想将一个对象由 Activity A 传递到 Activity B 该怎么办,比如 User 对象。

public class User {
    private String name;
    private String password;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public User(String name, String password, String age) {
        this.name = name;
        this.password = password;
        this.age = age;
    }
}

Android 并没有提供在两个 activity之间传递任意对象或者引用的方法,但是就是需要传递对象该怎么办呢,这个时候就需要 让该对象实现 Android 提供的 parcelable接口,如果该对象实现了parcelable接口,那么就可以利用下图红框中的方法进行传递了,putExtra(String name,Parcelable user);可以看出,我们可以传递一个被Parcelable包装过的对象了

Bundle 传递
Intent putExtra传递

Parcelable对象的传递原理
假设User对象已经实现了Parcelable接口
当我们调用下面的方法时:

intent.putExtra("userObject", user);

会将user对象 写入到一个Parcel对象中,跳转到Activity B后
再将Parcel中将user对象还原:

User user = intent.getParcelableExtra("userObject");

上面提到两个关键词 写入 和 还原 ,这两个方法是我们继承Parcelable接口后需要自己实现的方法,也就是说我们像Parcel中写入什么数据,然后还原什么数据都是由我们自己来决定的,下面贴出实现Parcelable接口后的user对象代码,然后再对代码进行解释


import android.os.Parcel;
import android.os.Parcelable;

/**
 * 
 * Created by brokge on 2015/5/12.
 */
public class User implements Parcelable {
    private String name;
    private String password;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public User(String name, String password, String age) {
        this.name = name;
        this.password = password;
        this.age = age;
    }
    public User(Parcel parcel){
        readFromParcel(parcel);
    }
   //读取 还原对象
   public void readFromParcel(Parcel in){
       name=in.readString();
       password=in.readString();
       age=in.readString();
   }

    public static final Parcelable.Creator CREATOR=new Parcelable.Creator<User>(){

        @Override
        public User createFromParcel(Parcel source) {
            return new User(source);
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };


    @Override
    public int describeContents() {
        return 0;
    }
   /**
    *写入对象,相当于封装
    */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(password);
        dest.writeString(age);
    }


}

writeToParcel方法就是上面提到的写入操作,这里将 user 对象的用户名和密码写入到了parcel中, return new User(source); 就是返回一个 User 对象,source 指的是写入的 parcel,在 public User(Parcel parcel)中我们需要将写入的数据通过 public void readFromParcel(Parcel in) 进行还原,即从in中读取写入数据赋值给 User 对象中的实例变量,这样我们就具有了一个有和传入的user对象有着相同实例变量值的还原后的 user 对象,这样就实现了对象的传递。

有朋友说,其实通过“ Serializable 序列化后通过bundle打包传递” 是的,的确可以,但两者是有区别的,可以移步:Serializable 和 Parcelable 如何选择

### 回答1: Android Parcelable Code Generators是一种用于自动生成Android Parcelable接口相关代码的工具。在Android开发中,Parcelable接口常常用于在Activity之间传递自定义对象。但是手动实现Parcelable接口并编写相关的代码是繁琐且容易出错的,因此开发人员常常使用Parcelable Code Generators来自动生成这些代码。 Parcelable Code Generators可以帮助开发人员简化Parcelable接口的实现过程。它通过解析自定义对象的属性和方法,生成相应的Parcelable接口实现。开发人员只需要在自定义对象上添加一些注解或配置,然后使用Parcelable Code Generators生成器工具即可自动生成Parcelable相关的代码,包括序列化和反序列化的方法。 使用Parcelable Code Generators的好处是提高了开发效率,减少了手动实现Parcelable接口所需的工作量。开发人员只需要关注对象的定义和注解的配置,而无需费心编写复杂的序列化和反序列化代码。此外,Parcelable Code Generators还可以保证生成的代码的正确性和稳定性,避免了手动编写代码过程中可能出现的错误。 总之,Android Parcelable Code Generators是一种实用工具,能够帮助开发人员自动生成Parcelable相关代码,提高开发效率,减少错误。使用它可以简化开发过程,使得在Activity之间传递自定义对象变得更加方便和可靠。 ### 回答2: Android中实现Parcelable接口可以用于实现对象的序列化和反序列化,方便数据的传递和保存。然而,手动编写Parcelable的代码需要写入大量重复的代码,比较繁琐且易出错。因此,有一些代码生成器可以用来自动生成Parcelable代码,简化并加速开发过程。 一种常用的Android Parcelable代码生成器是插件"Parcelable Code Generator"。这个插件可以作为Android Studio的一个扩展来安装和使用。Parcelable Code Generator使用注解处理器,可以根据模板自动生成Parcelable相关代码。 使用这个插件,我们只需要在需要实现Parcelable的Java类上添加一个注解,例如"@Parcelable"。然后,编译项目时插件会自动扫描注解,根据类的字段自动生成Parcelable的代码。生成的代码中包含了Parcelable接口的实现和parcelable的函数,这样就可以将对象序列化到Parcel中,或者将Parcel中的数据还原到对象中。 Parcelable Code Generator还支持一些配置选项,比如可以指定Parcelable的名称、包名、是否实现Parcelable.Creator等。此外,插件还支持自定义Parcelable代码的模板,可以根据需求自定义生成的Parcelable代码的格式和内容。 总之,Android Parcelable Code Generator插件简化了Parcelable代码的编写,提高了开发效率和代码质量。使用这个插件,可以省去手动写入Parcelable的代码,减少了出错的可能性,节省了开发时间。它是Android开发中的一种常见工具,为我们提供了方便快捷的Parcelable代码生成功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值