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 ...
随机推荐
- ubuntu下安装stm32开发环境
在windowns下开发stm32刚开始学最烦的就是创建工程模板,都不知道为什么要那样设置,而且步骤繁多.现在我告诉大家一个好消息,在linux下配置stm32开发环境包括创建工程,使用JLink仿真 ...
- python学习——练习题(12)
""" 题目:判断101-200之间有多少个素数,并输出所有素数. 质数(prime number)又称素数,有无限个. 质数定义为在大于1的自然数中,除了1和它本身以外 ...
- halcon的长度和角度测量
halcon代码: 1: *读取并截取图片 2: dev_close_window() 3: read_image (Image, 'D:/MyFile/halcon/长度和角度测量/图.png') ...
- addin1
Mono.addin是一个插件框架,更多信息请访问 http://monoaddins.codeplex.com/
- filter入门
TestFilter.java package com.cdsxt.filter; import java.io.IOException; import javax.servlet.Filter;im ...
- Kafka总结的一张图
- 详细探究Spark的shuffle实现
Background 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环 节,shuffle的性能高低直接影响 ...
- HRESULT:0x80070057 (E_INVALIDARG)
笔记本蓝屏后,在vs2010中调试项目时出现该异常, 解决方法:清空C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Fi ...
- 【Unity】Collider随骨骼动画运动
Collider位置和角色的动作不一致会导致Mesh互相镶嵌,让游戏失真. 想象一扇门的Collider没随它打开的动画移动,结果就是你看着门开着却穿不过去. 而我遇到的情况是: 角色在执行跑 ...
- 微信小程序文档里看不到的小Tips
前几天折腾了下.然后列出一些实验结果,供大家参考. 0. 使用开发工具模拟的和真机差异还是比较大的.也建议大家还是真机调试比较靠谱. 1. WXML(HTML) 1.1 小程序的WXML没有HTML的 ...