Android-Intent意图传递数据
Intent意图传递基本数据类型:
OuterActivity 激活启动 OneActivity 用Intent携带基本数据类型:
/**
* Intent意图传递数据到另外一个Activity
*/
public void intentToData(View view) {
Intent intent = new Intent(this, TwoActivity.class);
intent.putExtra("name", "乔峰");
intent.putExtra("age", 40);
intent.putExtra("fight", 800.65);
startActivity(intent);
}
OneActivity接收Intent基本数据类型:
TextView tvInfo = findViewById(R.id.tv_info);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 18);
double fight = intent.getDoubleExtra("fight", 0.0);
tvInfo.setText("name:" + name + " ,age:" + age + " ,fight:" + fight);

OuterActivity 激活启动 OneActivity 用Intent携带基本数据类型:
把数据封装到Bundle里面:
/**
* Intent意图传递数据到另外一个Activity
*/
public void intentToData(View view) {
Intent intent = new Intent(this, TwoActivity.class); // 使用Bundle对象来包装数据(Bundle是对Map进行来封装处理,只要是看到putXXX的,一定是对Map进行来封装)
Bundle bundle = new Bundle();
bundle.putString("name", "乔峰");
bundle.putInt("age", 40);
bundle.putDouble("fight", 800.65);
intent.putExtras(bundle);
startActivity(intent);
}
OneActivity接收Intent基本数据类型:
注意:⚠️ 在接收 Bundle 包装的数据 的时候,和获取基本数据类型的方式一模一样,直接intent.getStringExtra();
TextView tvInfo = findViewById(R.id.tv_info);
Intent intent = getIntent();
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 18);
double fight = intent.getDoubleExtra("fight", 0.0);
tvInfo.setText("name:" + name + " ,age:" + age + " ,fight:" + fight);
Intent传递对象 (Serializable):
需要理解一个概念:序列化就是把内存的数据存在文件里,反序列化就是把文件里的数据读取处理让内存显示
Serializable是Java io 包 中的序列化接口
写Dog一个类,实现Serializable接口,Dog类才可以被Intent传递
package liudeli.activity.intent.entity;
import java.io.Serializable;
public class Dog implements Serializable {
public int id;
public String name;
public String color;
@Override
public String toString() {
return "Dog{" +
"id=" + id +
", name='" + name + '\'' +
", color='" + color + '\'' +
'}';
}
}
Intent意图传递Serializable对象:
/**
* Intent意图传递数据到另外一个Activity
*/
public void intentToData(View view) {
Intent intent = new Intent(this, TwoActivity.class); Dog dog = new Dog();
dog.id = 1;
dog.name = "阿黄";
dog.color = "金黄色";
intent.putExtra("dogObject", dog); startActivity(intent);
接收Intent意图传递过来的Serializable对象:
TextView tvInfo = findViewById(R.id.tv_info);
Intent intent = getIntent();
Dog dog = (Dog) intent.getSerializableExtra("dogObject");
tvInfo.setText("dog.id:" + dog.id + "\n" + "dog.name:" + dog.name + "\n" + "dog.color:" + dog.color);

Intent传递对象 (Parcelable),Android开发推荐用Parcelable,消耗低,效率高:
需要理解一个概念:序列化就是把内存的数据存在文件里,反序列化就是把文件里的数据读取处理让内存显示
Serializable是Java io 包 中的序列化接口
Parcelable是 android.os 包 中的序列化接口
已经有来Serializable序列化接口,用来传递对象,Android为什么还要搞个Parcelable序列化接口?

答:Serializable是针对JVM虚拟机的,Serializable在Android中运行,效率低;
而Parcelable是Android专门设计的接口,消耗低,效率高些。
写Cat一个类,实现Parcelable接口,Cat类才可以被Intent传递
package liudeli.activity.intent.entity; import android.os.Parcel;
import android.os.Parcelable; public class Cat implements Parcelable { public int id;
public String name;
public double body; public Cat() { } /**
* 此构造方法是用于读取数据,顺序必须和writeToParcel方法一模一样
* @param in
*/
protected Cat(Parcel in) {
id = in.readInt();
name = in.readString();
body = in.readDouble();
} public static final Creator<Cat> CREATOR = new Creator<Cat>() {
@Override
public Cat createFromParcel(Parcel in) {
return new Cat(in);
} @Override
public Cat[] newArray(int size) {
return new Cat[size];
}
}; @Override
public int describeContents() {
return 0;
} /**
* 此方法是写入数据,顺序必须和Cat(Parcel in)构造方法一模一样
* @param dest
* @param flags
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
dest.writeDouble(body);
}
}
Intent意图传递Parcelable对象:
Intent intent = new Intent(this, TwoActivity.class);
// 传递Parcelable接口实现类
Cat cat = new Cat();
cat.id = 1000;
cat.name = "小白";
cat.body = 6.6;
intent.putExtra("catObject", cat);
startActivity(intent);
接收Intent意图传递过来的Parcelable对象:
Intent intent = getIntent();
Cat cat = intent.getParcelableExtra("catObject");
tvInfo.setText("cat.id:" + cat.id + "\n" + "cat.name:" + cat.name + "\n" + "cat.body:" + cat.body);

Parcelable为什么效率高,消耗低?
答:因为Parcelable内部的实现是 包装属性 传递属性 读取属性,而不是真正的把对象传递过去,所以效率高,消耗低。
Android-Intent意图传递数据的更多相关文章
- Android 使用意图传递数据
使用意图传递数据之通用方式. 测试应用:当前页面点击button传递数据到一个新的页面显示在textview中. 首先在,mainActivity.xml文件中加入一个button按钮 <But ...
- Android学习笔记(十二)——使用意图传递数据的几种方式
使用意图传递数据的几种方式 点此获取完整代码 我们除了要从活动返回数据,也经常要传递数据给活动.对此我们能够使用Intent对象将这些数据传递给目标活动. 1.创建一个名为PassingData的项目 ...
- Android Intent不可传递大数据
今天用intent传递一个bitmap,结果一直出错,intent无法执行,原来是intent不能传递大数据导致的,具体是多大,不太清楚,但我传递的bitmap在1m以上.
- Android剪切板传递数据传递序列化对象数据
一.剪切板的使用介绍 1. 剪切板对象的创建 使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用A ...
- Android 使用全局变量传递数据
使用全局变量传递数据,所谓的全局变量类似于jee开发中的application变量.申明后,全局调用.只有当内存被清理后,才被销毁.否则一直可以调用. 还是使用点击一个button,传递一个数据到另一 ...
- Android 通过Application 传递数据
</pre><pre> package com.example.ApplicationTest; import android.app.Application; /** * C ...
- Android与NativeC传递数据不正确问题
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Android studio 2.3.3 这两天一直在调试一个BUG,具体为通过 NativeC 来处理上层Android ...
- android使用全局变量传递数据
android中Application是用来保存全局变量的,在package创建的时候就存在了,到所有的activity都被destroy掉之后才会被释放掉.所以当我们需要全局变量的时候只要在appl ...
- Android-Application来传递数据
在上一篇博客中介绍到,Android-Intent意图传递数据,能够传递基本数据类型系列,能够传递对象(需要序列化),等操作: 但是如果要传递 List<T>,这种类型的数据,就不能通过I ...
随机推荐
- sql语句中避免使用mysql函数,提升mysql处理能力。
如下sql中不要用mysql内置函数now()等,这样第一可以提高sql执行效率,第二统一程序层处理sql中时间参数,避免因服务器时间差导致问题产生. 使用PDO预处理,第一可以提高sql效率,第二可 ...
- linux网络监视器
vnstat iftop nethogs dig ipcalc
- C#做的在线升级小程序
转自原文C#做的在线升级小程序 日前收到一个小任务,要做一个通用的在线升级程序.更新的内容包括一些dll或exe或.配置文件.升级的大致流程是这样的,从服务器获取一个更新的配置文件,经过核对后如有新的 ...
- LUA 环境
LUA中环境是指一个函数执行的表,即一个函数在什么表中执行. 这里的函数是特殊的,是loadfile("x.lua")的返回值. loadfile("x.lua" ...
- AspectJ的aop编程--切入点表达式
- spring的传播行为和隔离级别
7个传播行为,4个隔离级别(转自 http://www.blogjava.net/freeman1984/archive/2010/04/28/319595.html) Spring事务的传播行为和隔 ...
- out.write(b,0,len)怎么解释?
参数 缓冲区——要写的数据 从——开始偏移量数据 len——写的字节数 返回值 这个方法不返回一个值. 异常 IOException
- 191. Number of 1 Bits 二进制中1的个数
[抄题]: Write a function that takes an unsigned integer and returns the number of ’1' bits it has (als ...
- CloudStack tomcat集成方式分析
CloudStack 的server.xml和tomcat6.conf都是软连接 CloudStack 在执行脚本时报异常如下: 修改vim /etc/sudoers文件,具体如下 以 ...
- mac上,sudo启动IDEA
cd /Applications/IntelliJ IDEA 14.app/Contents/MacOS sudo ./idea # 就是这个启动,我一开始没有找到这个启动项...这样你就能运行80端 ...