Android中Intent传递类对象的方法一(Serializable)

Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte、byte[]、char、char[]、boolean、boolean[]、short、short[]、int、int[]、long、long[]、float、float[]、double、double[]、String、String[],还有实现了Serializable、Parcelable接口的类对象。

实现Serializable接口和实现Parcelable接口传递类对象的方法分别是:
(1)Bundle.putSerializable(Key,Object);
(2)Bundle.putParcelable(Key, Object);

实际上Serializable和Parcelable接口都是可以完成对象的序列化过程,所以当我们需要通过Intent或者Binder传输数据的时候就需要使用Parcelable或者Serialization。还有一些时候我们需要把对象持久化到存储设备上或者通过网络传输给其他客户端等都需要使用到Serialization来完成对象的持久化。

我们简单看一下第一种方法:Serialization接口

我新建了一个UserModel.java类实现了Serializable接口,使用Serialization实现序列化特别简单,只需要这个类实现Serialization接口并声明一个serialVersionUID 即可。

package com.xiaolijuan.serializabledome.model;

import java.io.Serializable;

/**
 * @author: xiaolijuan
 * @description:
 * @date: 2016-04-03
 * @time: 21:23
 */
public class UserModel implements Serializable{

    private static final long serialVersionUID = 6465198351058235015L;
    public int userId;
    public String userName;
    public boolean isMale;

    public UserModel(int userId, String userName, boolean isMale) {
        this.userId = userId;
        this.userName = userName;
        this.isMale = isMale;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public boolean isMale() {
        return isMale;
    }

    public void setIsMale(boolean isMale) {
        this.isMale = isMale;
    }
}

实际上,serialVersionUID 也不是必需的,我们不声明这个serialVersionUID 同样也可以实现序列化,但是这个会对反序列化过程造成影响,具体就不详细介绍了。

接着我们在MainActivity.java中传递实现了Serializeable接口的UserModel对象

 //序列化过程
        UserModel userModel = new UserModel(0, "lijuan", true);
        Intent intent = new Intent(MainActivity.this,
                SecondActivity.class);
        intent.putExtra("userModel", userModel);
        startActivity(intent);

现在在SecondActivity.java中就可以接收到从MainActivity.java传递过来的UserModel啦

 //反序列化过程
        UserModel userModel = (UserModel) getIntent()
                .getSerializableExtra("userModel");
        Log.e("TAG", "用户Id:" + userModel.getUserId() + ",用户名:" + userModel.getUserName() + ",男生?" + userModel.isMale());

此时在日志中就会打印出我们这行信息啦

04-03 23:38:56.020  10596-10596/com.xiaolijuan.serializabledome E/TAG﹕ 用户Id:0,用户名:lijuan,男生?true

插入一个话题,如果我们要声明serialVersionUID,那么serialVersionUID后面那一长串数字又是怎么来的呢?
在Android Studio中,我们可以设置自动生成 serialVersionUID,接下来看一下吧
File -> Settings->Editor -> Inspections -> Serialization issues -> Serializable class without ‘serialVersionUID’(此时记得打勾哦),然后点击OK就可以了

这里写图片描述
找不到的话可以直接在Preference中搜索Serialization issues

这里写图片描述
回到需要实现Serialization接口的类中,选中类名就直接Alt+enter就会提示了
现在就会多出这一行啦

private static final long serialVersionUID = 6465198351058235015L;

本篇博客在这里就结束了,有不足的地方还望各路大神指导 ,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值