Android-Intent意图传递数据

眼前多少难甘事,自古男儿当自强。这篇文章主要讲述Android-Intent意图传递数据相关的知识,希望能为你提供帮助。
Intent意图传递基本数据类型:

Android-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基本数据类型:
TextViewtvInfo = 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);

 
Android-Intent意图传递数据

文章图片

 
 
 
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();
TextViewtvInfo = 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对象:
TextViewtvInfo = 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);

 
Android-Intent意图传递数据

文章图片

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

文章图片

答: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 doublebody; 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);

 
Android-Intent意图传递数据

文章图片

 
Parcelable为什么效率高,消耗低?
答:因为Parcelable内部的实现是 包装属性 传递属性 读取属性,而不是真正的把对象传递过去,所以效率高,消耗低。
 

    推荐阅读