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. AtCoder - 2061 Tree Restoring

    Problem Statement Aoki loves numerical sequences and trees. One day, Takahashi gave him an integer s ...

  2. SD 一轮集训 day1 carcar

    可以发现每条边只能选一次或者两次,并且最后每个点的度数(∑邻接边选的次数和)都是偶数(代表有欧拉回路). 然后根据题意列一个 n 行 m+1 列的01矩阵,每一行代表一个异或方程组(每个点的度数是偶数 ...

  3. 【主席树】bzoj2588 Spoj 10628. Count on a tree

    每个点的主席树的root是从其父转移来的.询问的时候用U+V-LCA-FA(LCA)即可. #include<cstdio> #include<algorithm> using ...

  4. [CF842E]Nikita and game

    [CF842E]Nikita and game 题目链接: CF842E 博客地址: [CF842E]Nikita and game - skylee 题目大意: 一棵树初始只有一个编号为\(1\)的 ...

  5. 使用jQuery操作DOM(ppt练习)

    <!DOCTYPE html> <html> <head> <title>test3.html</title> <meta http- ...

  6. [转][译] 分分钟学会一门语言之 Python 篇

    Python was created by Guido Van Rossum in the early 90's. It is now one of the most popularlanguages ...

  7. 用正则把url解析为对象

    用正则把url解析为对象 <!DOCTYPE html><html><head><meta charset="utf-8">< ...

  8. 使用apt-cache search搜索想要的软件包

    环境: Ubuntu14.10 我在编译u-boot代码的时候遇到了如下问题: LD test/dm/built-in.o CC examples/standalone/stubs.o LD exam ...

  9. 【mybatis】mybatis中insert 主键自增和不自增的插入情况【mysql】

    主键不自增:返回值是插入的条数 <insert id="add" parameterType="EStudent"> insert into TSt ...

  10. Swift,字符串

    1.字符串只能使用双引号 var a="你好" 2.单字与多字 var a:Character="1" var b:String="12" ...