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 ...
随机推荐
- 26_java之进程|线程|线程池
01进程概念 *A:进程概念 *a:进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行, 即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 02线程的概念 *A:线程的概 ...
- STL之父Stepanov谈泛型编程的发展史
这是一篇Dr. Dobb's Journal对STL之父stepanov的采访.文中数次提到STL的基本思想.语言的特性.编程的一些根本问题等,非常精彩.这篇文章让我想去拜读下stepanov的大作& ...
- Program Size: data=9.0 xdata=0 code=47
data=47.0 编译器编译后,程序总共需要占用47字节的片内RAM空间.注意这个大小仅仅是累加而已,并未考虑各个块之间的空隙,也就是说实际占用的RAM空间可能多于此数值.xdata=0 程序未使用 ...
- Android 判断字符串是否相等
判断两个String是否相等不能直接用== 或!=,需要用equals()判断,若相等,则返回1 判断TextView中文字是否相等: TextView A,B; if (A.getText().to ...
- IOS 键盘的显示与关闭
在每一个IOS应用中,几乎不可避免的要进行文本输入操作,例如要求用户填写登陆注册信息,进行话题的评论回复,等等.用到的文本输入组件有UITextField,UITextView,对于这两个组件的相关属 ...
- 深入探究jvm之GC的参数调优
在上一篇博客记录了GC的算法及种类,这篇博客主要记录一下GC的参数如何调整以提高jvm的性能. 一.堆的回顾: 堆的内存空间总体分为新生代和老年代,老年代存放的老年对象,新构造的对象分配在eden区中 ...
- ubuntu 下安装nanomsg和nnpy
nanomsg nanomsg是ZeroMQ作者用C语言重写的一个Socket库,其用法和模式和ZeroMQ差不多,但是具有更好的性能和更完善的接口. 首先下载源码 wget https://gith ...
- git命令用法
git svn 说明 git pull svn update git add 要提交的文件名 svn add git rm svn rm,del git commit -m '备注一下提 ...
- docker plugin test
docker build -t docker-volume-drbd . id=$(docker create docker-volume-drbd true) docker export $id - ...
- 92. Reverse Linked List II (List)
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1-> ...