Android Intent参数传递,包括对象复杂集合等多方式传递

用Intent传递数据的时候,如果传递的是基本类型,不用说很容易,单个的就是单个的传,多个就用bundle传递,如果传递的是对象或者是集合,简单的某个集合还是可以直接传的,但是大多数的是不可以传的。在传递对象的时候有两种方式,一种是实现Parcelable或者Serializable接口序列化对象来传递,在传集合的时候,可能是通过简单的集合嵌套复杂的集合进行传递,但是这些方式都非常的麻烦、复杂,待会我会介绍一种方便简单的方式。

第一种方式:实现Parcelable或者Serializable接口序列化对象来传递

Student实体实现接口Serializable的代码

package com.jky.activityparams;

import java.io.Serializable;

//Serializable 标记接口,标记这个类的实例可以被序列化
public class Student implements Serializable {

	public String name;
	public int age;
	public boolean isSingle = false;

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", isSingle="
				+ isSingle + "]";
	}

}

Friend实体实现接口Parcelable的代码

package com.jky.activityparams;

import android.os.Parcel;
import android.os.Parcelable;

//实现Parcelable的对象还可以用于垮进程传输
//可以用于Java与C++之间的传输
//QQ知道QQ音乐播放的当前歌曲
public class Friend implements Parcelable {

	public String name;
	public int age;
	public boolean gender;

	public Friend(String name, int age, boolean gender) {
		super();
		this.name = name;
		this.age = age;
		this.gender = gender;
	}

	//必须要有这个静态属性
	public static final Parcelable.Creator<Friend> CREATOR = new Parcelable.Creator<Friend>() {
		// 读
		public Friend createFromParcel(Parcel in) {
			// 按照写的顺序读取
			String name = in.readString();
			int age = in.readInt();
			int g = in.readInt();
			boolean gender = false;
			if (g == 1) {
				gender = true;
			}
			return new Friend(name, age, gender);
		}

		// 便捷方法,快速的创建一个空的数组
		public Friend[] newArray(int size) {
			return new Friend[size];
		}
	};

	// 返回0,描述对象是什么内容
	@Override
	public int describeContents() {
		return 0;
	}

	// 写的方法
	// writeToParcel实际传递的是Parcel
	@Override
	public void writeToParcel(Parcel dest, int flags) {
		// 写对象的属性
		dest.writeString(this.name);
		dest.writeInt(this.age);
		if (this.gender) {
			dest.writeInt(1);
		} else {
			dest.writeInt(0);
		}
	}

	@Override
	public String toString() {
		return "Friend [name=" + name + ", age=" + age + ", gender=" + gender
				+ "]";
	}

}

传递方的Activity代码,这里可以不是Activity,这里的demo写的是Activity

public void jump(View btn){
	//跳转到SecondActivity
	//显示意图
	Intent intent = new Intent(this, SecondActivity.class);
		
	//Activity之间传递参数
	//1.单个参数
	//intent.putExtra("name", "许肖华");
		
	//2.多个参数
	/*Bundle data = new Bundle();
	data.putString("name", "蒋春梅");
	data.putInt("age", 18);
	data.putBoolean("isSingle", false);
	intent.putExtra("data", data);*/
		
	//3.传递Serializable对象
	/*Student s = new Student("蒋春梅",18);
	intent.putExtra("data", s);*/
		
	//4.传递parcelable对象
	//好处:序列化的效率更高
	Friend f = new Friend("袁丁",18,false);
	intent.putExtra("data", f);
	startActivity(intent);
}

接收方的代码

	//获取传递的参数
	Intent intent = getIntent();
		
	//1.
	/*String name = intent.getStringExtra("name");
	Log.d("geek", name);*/
	
	//2.Bundle
	/*Bundle data = intent.getBundleExtra("data");
	String name = data.getString("name");
	Log.d("geek", name);*/
		
	//3.Serializable对象
	/*Student s = (Student)intent.getSerializableExtra("data");
	Log.d("geek", s.toString());*/
		
	//4.parcelable对象 
	Friend f = intent.getParcelableExtra("data");
	Log.d("geek", f.toString());
第一种方式就是这样通过序列化的方式实现对象的传递,供大家了解,接下来将介绍第二种简单的方式

第一种方式:通过继承Application类

在子类中定义公共变量

/***用于对象的传递 传递完了记得Remove掉*/
public Map<String, Object> datas = new HashMap<>();
传递方

EntityTest entityTest = new EntityTest();		
caHyApplication1.datas.put("entityTest",entityTest);	
接收方

EntityTest entityTest = (EntityTest) caHyApplication.datas.get(name);

获取到数据之后要记的

caHyApplication.datas.remove(name);

集合对象都可以通过这种方式,因为Application的生命周期是最长的,而且是单例模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值