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;

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

Android中Intent传递类对象的方法一(Serializable)的更多相关文章

  1. Android 通过 Intent 传递类对象或list对象

    (转:http://www.cnblogs.com/shaocm/archive/2013/01/08/2851248.html) Android中Intent传递类对象提供了两种方式一种是 通过实现 ...

  2. Android 通过 Intent 传递类对象

    Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象. 要求被传递的对象必须实现上述2种接口中的一种 ...

  3. android通过 Intent 传递类对象

    Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象. 要求被传递的对象必须实现上述2种接口中的一种 ...

  4. Android 开发笔记——通过 Intent 传递类对象

    Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象. 要求被传递的对象必须实现上述2种接口中的一种 ...

  5. Android中Intent传递对象的两种方法(Serializable,Parcelable)

    今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...

  6. [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)

    http://blog.csdn.net/xyz_lmn/article/details/5908355 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种 ...

  7. Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!

    [转][原文] 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object); ...

  8. 【转】Android中intent传递对象和Bundle的用法

    原文网址:http://blog.csdn.net/lixiang0522/article/details/8642202 android中的组件间传递的对象一般实现Parcelable接口,当然也可 ...

  9. Android——使用 Intent传递类

    定义要传递的类事,必须加上 public class Movie implements Serializable { } 传入类: public void onItemClick(AdapterVie ...

随机推荐

  1. jboss启动时java VM参数设置

    jboss服务器中jvm参数的设置: 在$JBOSS_HOME/bin下的run.sh里面存在这么一个设置: # Force IPv4 on Linux systems since IPv6 does ...

  2. AtCoder - 2064 Many Easy Problems

    Problem Statement One day, Takahashi was given the following problem from Aoki: You are given a tree ...

  3. 【动态规划】【零一背包】CODEVS 1014 装箱问题 2001年NOIP全国联赛普及组

    #include<cstdio> #include<algorithm> using namespace std; ],f[]; int main() { scanf(&quo ...

  4. (转)关于Unity3D的编辑器崩溃时的线索定位

    今天在Unity3D编辑器中进行功能测试的时候,编辑器突然崩溃了(就是整个窗口突然消失,进程直接结束)之后也没有任何错误报告信息提示.好吧,应该是偶现问题,我侥幸地想,我用的好歹也是正版啊,不应该总出 ...

  5. Scala实战高手****第9课:Scala类和对象彻底实战和Spark源码鉴赏

    scala类和对象 RDD中创建_sc和deps相比java更加的简洁. 在Spark的例如SparkContext.sqlSpark等全局成员在完成实例化. 在唯一实例的时候一般不会去使用伴生对象a ...

  6. glib wpa_supplicant Unix上库编译错误解决与总结

    编译Linux下的库是一件痛苦的事情,这里主要阐述glib和wpa_supplicant库的编译,因各自的依赖关系,另外一些库要事先编译.glib依赖libffi和zlib,而wpa_supplica ...

  7. jquery获取css颜色值返回RGB应用

    我来给大家介绍一下在jquery获取css颜色值返回RGB方法,希望此文章对各位同学会有所帮助哦.   代码如下:  代码如下 复制代码 a, a:link, a:visited { color:#4 ...

  8. Bitcoin 比特币, LTC(litecoin)莱特币,

    1.挖掘机   http://asicme.com/index 2.官方:  http://bitcoin.org/zh_CN/ =============== 1\  最好的比特币资讯网站   ht ...

  9. Thunderbird使用发邮件模板

    Thunderbird的强大之处是可以使用多种第三方插件,其中有个插件SmartTemplate4,是用来设置Thunderbird发件模板的. 然后,模板设置内容如下: <p>:< ...

  10. 13、mha高可用架构搭建

    各节点架构: 192.168.1.20(mysql5.5) master主库 192.168.1.21(mysql5.5) slave1,目标:主库宕可提升为主库 192.168.1.22(mysql ...