如何通过Intent传递一个Bean

1. 方法1

(1)BeanSerializable

public class BeanSerializable implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private String name;
	private int age;
	private String address;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

 (2)Sender

public class Sender extends Activity {
	private Button btn;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sender);
		btn = (Button) findViewById(R.id.sender_btn);
		btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				BeanSerializable bean = new BeanSerializable();
				bean.setAddress("大学路195号");
				bean.setAge(25);
				bean.setName("Forrest");
				
				Intent intent = new Intent(Sender.this, Receiver.class);  
				intent.putExtra("PERSON_INFO", bean);  
				startActivity(intent);  
			}
		});
	}
}

  (3)Receiver

public class Receiver extends Activity {
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.receiver);
		Intent intent = getIntent();
		
		BeanSerializable bean = (BeanSerializable) intent.getSerializableExtra("PERSON_INFO");
		TextView tv = (TextView) findViewById(R.id.receiver_tv);
		tv.setText(bean.getName() + " / " + bean.getAddress() + " / " + String.valueOf(bean.getAge()));
	}
}
 

2. 方法2

(1)BeanParcelable

public class BeanParcelable implements Parcelable {

	private String name;
	private int age;
	private String address;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public int describeContents() {
		return 0;
	}

	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(name);
		dest.writeInt(age);
		dest.writeString(address);
	}

	public static final Parcelable.Creator<BeanParcelable> CREATOR = new Creator<BeanParcelable>() {

		public BeanParcelable createFromParcel(Parcel source) {

			BeanParcelable bean = new BeanParcelable();
			bean.name = source.readString();
			bean.age = source.readInt();
			bean.address = source.readString();
			return bean;
		}

		public BeanParcelable[] newArray(int size) {
			return new BeanParcelable[size];
		}

	};
}

 (2)Sender

public class Sender extends Activity {
	private Button btn;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.sender);
		btn = (Button) findViewById(R.id.sender_btn);
		btn.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				BeanParcelable beanParcelable = new BeanParcelable();
				beanParcelable.setAddress("政立路545弄6号楼402");
				beanParcelable.setAge(25);
				beanParcelable.setName("Forrest");
				
				Intent intent = new Intent(Sender.this, Receiver.class);  
				intent.putExtra("PERSON_INFO", beanParcelable);  
				startActivity(intent);  
			}
		});
	}
}

 (3)Receiver

public class Receiver extends Activity {
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.receiver);
		Intent intent = getIntent();
		
		BeanParcelable beanParcelable = (BeanParcelable) intent.getParcelableExtra("PERSON_INFO");
		TextView tv = (TextView) findViewById(R.id.receiver_tv);
		tv.setText(beanParcelable.getName() + " / " + beanParcelable.getAddress() + " / " + String.valueOf(beanParcelable.getAge()));
	}
}

 

3. 注意事项

有些Bean是无法通过上面两种方法传递的。例如以Drawble[] photos;为参数的Bean,因为android的IO设计无法write Drawable,而只能writeString, writeInteger, writeFile等。所以我们就不直接传递Drawable[]参数,改而传递生成Drawable[]的数据,传递到了目的地再利用这些数据生成Drawable[]。就好像你要运输一架飞机,但你无法整机运输(传递),你只好先将飞机的各个零部件运输到目的地(这个是可以运输传递的),然后在目的地再将这些零部件组装成飞机。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值