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意图传递数据的更多相关文章

  1. Android 使用意图传递数据

    使用意图传递数据之通用方式. 测试应用:当前页面点击button传递数据到一个新的页面显示在textview中. 首先在,mainActivity.xml文件中加入一个button按钮 <But ...

  2. Android学习笔记(十二)——使用意图传递数据的几种方式

    使用意图传递数据的几种方式 点此获取完整代码 我们除了要从活动返回数据,也经常要传递数据给活动.对此我们能够使用Intent对象将这些数据传递给目标活动. 1.创建一个名为PassingData的项目 ...

  3. Android Intent不可传递大数据

    今天用intent传递一个bitmap,结果一直出错,intent无法执行,原来是intent不能传递大数据导致的,具体是多大,不太清楚,但我传递的bitmap在1m以上.

  4. Android剪切板传递数据传递序列化对象数据

    一.剪切板的使用介绍 1. 剪切板对象的创建 使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用A ...

  5. Android 使用全局变量传递数据

    使用全局变量传递数据,所谓的全局变量类似于jee开发中的application变量.申明后,全局调用.只有当内存被清理后,才被销毁.否则一直可以调用. 还是使用点击一个button,传递一个数据到另一 ...

  6. Android 通过Application 传递数据

    </pre><pre> package com.example.ApplicationTest; import android.app.Application; /** * C ...

  7. Android与NativeC传递数据不正确问题

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Android studio 2.3.3 这两天一直在调试一个BUG,具体为通过 NativeC 来处理上层Android ...

  8. android使用全局变量传递数据

    android中Application是用来保存全局变量的,在package创建的时候就存在了,到所有的activity都被destroy掉之后才会被释放掉.所以当我们需要全局变量的时候只要在appl ...

  9. Android-Application来传递数据

    在上一篇博客中介绍到,Android-Intent意图传递数据,能够传递基本数据类型系列,能够传递对象(需要序列化),等操作: 但是如果要传递 List<T>,这种类型的数据,就不能通过I ...

随机推荐

  1. Python Tkinter参考资料之(通用控件属性)

    大部分控件的共享选项: 选项(别名) 说明 单位 典型值 没有此属性的控件 background(bg) 当控件显示时,给出的正常颜色 color 'gray25''#ff4400'   border ...

  2. C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值

    转自goldeneyezhang原文 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值总结: 对应某个类的 ...

  3. swagger 接口文档,控制器 和 object类型的参数与返回值 的 注释不显示问题

    一.控制器的注释不显示:是因为配置swagger的时候没有将includeControllerXmlComments参数配置为true,因为其默认值为false 二.object 类型的参数和返回值 ...

  4. QT与HALCON(入门)

    #include "qtdesign.h" #include <QtGui/QApplication> #include "halconcpp.h" ...

  5. Page directive: illegal to have multiple occurrences of contentType with different values

    org.apache.jasper.JasperException: /commons/meta.jsp(1,1) PWC5988: Page directive: illegal to have m ...

  6. 从零玩转JavaWeb系列7web服务器-----get与post的区别

    总结get与post的区别 get参数通过url传递,post放在request body中. get请求在url中传递的参数是有长度限制的,而post没有. get比post更不安全,因为参数直接暴 ...

  7. java 修改文件

    public void fileAlter(String fileName,String content) throws IOException{                 BufferedRe ...

  8. html 资源

  9. 如何显示当前Mipmap级别?

    [如何显示当前Mipmap级别?] 乘以 mainTextureSize/mipTextureSize是为了让mipColorsTexture纹理与mainTexture级别对应.直接用uv是不行的, ...

  10. System.Diagnostics.Conditional

    [System.Diagnostics.Conditional] 指示编译器当特定的宏定义了时,才生成此方法的相应代码.只能应用于AttributeClass.Method. 参考:http://ms ...