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。
另一些时候我们须要把对象持久化到存储设备上或者通过网络传输给其它client等都须要使用到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() + ",username:" + userModel.getUserName() + ",男生?" + userModel.isMale());
此时在日志中就会打印出我们这行信息啦
04-03 23:38:56.020 10596-10596/com.xiaolijuan.serializabledome E/TAG﹕ 用户Id:0。username: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;
本篇博客在这里就结束了,有不足的地方还望各路大神指导 。谢谢!
最新文章
- 大话JS面向对象之开篇万物皆对象------(ATM取款机引发的深思)
- echarts异步加载柱状图遇到的错误- Error: Component series. not exists. Load it first.
- u-boot 流程分析
- Codeforces Round #251 (Div. 2) B. Devu, the Dumb Guy
- JS 之匿名函数
- iOS 顺传
- 启用ntp服务
- (转)Tomcat内存设置
- 红帽(Red Hat Linux)下SVN服务器的安装与配置
- Cmake ,Out of Source Build
- python3-day3(函数-返回值)
- android 代码布局 记录
- 在 Windows Azure 网站中进行纵向扩展和横向扩展
- 每天努力一点之SQL(二) count sum case when then group by
- 注册表 ControlSet001、ControlSet002以及CurrentControlSet
- 《Android系统源代码情景分析》连载回忆录:灵感之源
- Objective-C 使用核心动画CAAnimation实现动画
- VS的使用插件
- ansible roles
- SpringMVC云题库错题及答案汇总
热门文章
- [CF392E]Deleting Substrings
- 【矩阵乘法+快速乘】BZOJ2875-[NOI2012]随机数生成器
- [Android Studio Problems]记录克隆项目中遇到的坑(问题)以及解决方法
- 【MySQL笔记】Excel数据导入Mysql数据库的实现方法——Navicat
- linux内核3.6版本及以下的bug引发的故障--cpu使用率100%
- [Javascript]js判断是否为undefined类型
- Swift,结构体与类
- RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙
- supervisord的环境变量的设置
- GraphicsLab Project之辉光(Glare,Glow)效果 【转】