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. SVN命令解析以及问题解决(update...)

    SVN常用指令 1.Repo-browser(浏览版本库) 通过“浏览版本库”可以直接查看服务器上指定目录下的所有目录结构(需要有相关权限),包括特定版本的作者,提交时间等,并且在浏览版本库里面链接了 ...

  2. 用python3判断一个字符串 包含 中文

    在python中一个汉字算一个字符,一个英文字母算一个字符 用 ord() 函数判断单个字符的unicode编码是否大于255即可. s = '我xx们的88工作和生rr活168' n = 0 for ...

  3. rtmp聊天相关归总

    使用共享对象(SharedObject)来开发时时文字聊天其实是很简单的. SharedObject可以跟踪和广播消息,连接到SharedObject中的其中任何一个客户端改变了SharedObjec ...

  4. MaxScript 学习笔记【有转载】

    1. string string类型的变量是一个数组,下列操作合法:strName = $.name -- output: "Shemmy_03" strName[1] --得到字 ...

  5. 自定义javascript日历控件

    Web页中的日历一般离不开表格,通常都使用表格装载指定月的日期等信息.所以,要编写JS日历,首先必须解决的问题是表格的行与列问题.列是固定的,七列,因为一周有七天.行需要动态计算,因为,每一个月的第一 ...

  6. Codeforces 1154F (DP)

    题意:有一个人去买铲子,他需要买正好k把.每把铲子有个标价,并且每把铲子最多只能被买一次.有m种优惠方案,每个优惠方案xi, yi是指如果这次恰好购买了xi把铲子,那么这次购买的铲子中最便宜的yi把将 ...

  7. Spring学习笔记(四)--MVC概述

    一. 飞机 最近马来西亚航空370号班机事故闹得沸沸扬扬,情节整的扑朔迷离,连我在钻研springMVC平和的心情都间接的受到了影响.正当我在想这个MVC的处理过程可以怎样得到更好的理解呢?灰机,灰机 ...

  8. 让tomcat自动定位到项目

    在servelt.xml中添加粗体部分. <Host name="localhost" appBase="webapps" unpackWARs=&quo ...

  9. jQuery autocomplete -默认

    <!doctype html> <html> <head> <meta name="content-type" content=" ...

  10. 14-python登入教务网(python+bs4)

    用request先得到到session对象,用其去放送请求,会自动保存cookie. 模拟有验证码的登入步骤: 1.发送请求登入页面: 2.分析验证码的地址,以及要将登入请求发往的地址(可以先输入错的 ...