顺便提一句:
intent.putExtra(key,value) 其实都是把数据放到一个Bundle中,获取时可以使用getExtras()获取一个Bundle就是put的集合。如果put的时候既put了普通类型的变量,又声明了一个new Bundle,并putExtras(bundle),那么所有的数据都在这个bundle中
Intent intent=new Intent();
intent.putExtra("Key", "testValueNotInBundle");
intent.putExtra("Key2", "testValue2NotInBundle");
Bundle bundle=new Bundle();
bundle.putString("Key", "testValueInBundle");
intent.putExtras(bundle);
String valueNotInBundleString=intent.getStringExtra("Key");
String valueInBundleString=intent.getExtras().getString("Key");
String valueNotInBundle2String=intent.getExtras().getString("Key2");
String text="testValueNotInBundle is: "+valueNotInBundleString;
text+="\r\n";
text+="testValueInBundle is :"+valueInBundleString+"\r\n";
text+="testValue2NotInBundle is :"+valueNotInBundle2String;
textView1.setText(text);
另外,Bundle可以嵌套Bundle,所以别混淆了。
Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口
1,先说使用方法:
A)Put:
Intent mIntent = new Intent(this,ObjectTranDemo1.class);
Bundle mBundle = new Bundle();
mBundle.putSerializable(SER_KEY,mPerson);
mIntent.putExtras(mBundle);
Bundle mBundle = new Bundle();
mBundle.putParcelable(PAR_KEY, mBook);
mIntent.putExtras(mBundle);
intent.putParcelableArrayListExtra("sockets", models); //直接putParcelable数组
intent.putExtra(key,Object);//直接putExtra数据
B)Get:
Bundle bundle=getIntent().getExtras();再通过Bundle查询数据
Person mPerson = (Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);
Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY); //对应
models=getIntent().getParcelableArrayListExtra("sockets"); //对应直接putParcelableArrayListExtra
Person person = (Person)data.getParcelableExtra(key); //对应直接putExtra
2,继承接口的类的写法:
A)Serializable接口:奇怪,这个接口没有任何方法。
B)Parcelable接口:
public class Person implements Parcelable
{ private String Name = "anupama";
private String Address = "India";
private int Age = 30;
@Override
public int describeContents()
{ return 0;
}
@Override
public void writeToParcel(Parcel dest, int flag)
{ dest.writeString(Name);
dest.writeString(Address);
dest.writeInt(Age);
}
public Person(Parcel in)
{ this.Name = in.readString();
this.Address = in.readString();
this.Age = in.readInt();
}
@SuppressWarnings("unchecked")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Person createFromParcel(Parcel in)
{
return new Person(in);
}
public Person[] newArray(int size)
{
return new Person[size];
}
};
}
//==================================================
package com.ql.model;
import android.os.Parcel;
import android.os.Parcelable;
public class Stock implements Parcelable{
private String field_0;//代码+\n+名称
private String field_1;//最新+\n+金额
private String field_2;//涨幅
private String field_3;//涨跌
private String field_4;//雷达
//分时
private float[] field_5;//走势
private String field_6;//高点
private String field_7;//均线
private String field_8;//低点
public Stock(){
}
public Stock(String field_0, String field_1, String field_2, String field_3, String field_4, float[] field_5, String field_6, String field_7, String field_8) {
super();
this.field_0 = field_0;
this.field_1 = field_1;
this.field_2 = field_2;
this.field_3 = field_3;
this.field_4 = field_4;
this.field_5 = field_5;
this.field_6 = field_6;
this.field_7 = field_7;
this.field_8 = field_8;
}
public String getField_6() {
return field_6;
}
public void setField_6(String field_6) {
this.field_6 = field_6;
}
public String getField_7() {
return field_7;
}
public void setField_7(String field_7) {
this.field_7 = field_7;
}
public String getField_8() {
return field_8;
}
public void setField_8(String field_8) {
this.field_8 = field_8;
}
public float[] getField_5() {
return field_5;
}
public void setField_5(float[] field_5) {
this.field_5 = field_5;
}
public String getField_0() {
return field_0;
}
public void setField_0(String field_0) {
this.field_0 = field_0;
}
public String getField_1() {
return field_1;
}
public void setField_1(String field_1) {
this.field_1 = field_1;
}
public String getField_2() {
return field_2;
}
public void setField_2(String field_2) {
this.field_2 = field_2;
}
public String getField_3() {
return field_3;
}
public void setField_3(String field_3) {
this.field_3 = field_3;
}
public String getField_4() {
return field_4;
}
public void setField_4(String field_4) {
this.field_4 = field_4;
}
public static Parcelable.Creator getCreator() {
return CREATOR;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(field_0);
dest.writeString(field_1);
dest.writeString(field_2);
dest.writeString(field_3);
dest.writeString(field_4);
dest.writeFloatArray(field_5);
dest.writeString(field_6);
dest.writeString(field_7);
dest.writeString(field_8);
}
public Stock(Parcel in)
{
this.field_0 = in.readString();
this.field_1 = in.readString();
this.field_2 = in.readString();
this.field_3 = in.readString();
this.field_4 = in.readString();
// in.readFloatArray(this.field_5);//似乎不行
this.field_5=in.createFloatArray();//可能不妥,看API
this.field_6 = in.readString();
this.field_7 = in.readString();
this.field_8 = in.readString();
}
@SuppressWarnings("unchecked")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Stock createFromParcel(Parcel in)
{
return new Stock(in);
}
public Stock[] newArray(int size)
{
return new Stock[size];
}
};
}