Activity之間的數據傳輸
activity之間的數據傳輸我們可以通過Intent對象的putExtra方法,通過這個可以傳輸很多不同類型的數據,比如說字符串、整數、實數、對象等。
首先以一個字符串舉例來說一下:
通過putExtra傳輸字符串可以通過如下方法:
putExtra(String name, String value):intent
第一個參數爲用來讓接收數據的activity辨別的字符串,相當於HashMap中的索引值。
第二個爲要發送的數據(這裏是字符串)。
在目標activity中通過這個name來找到這個value。
當前activity中:
String str = "你好";
intent.putExtra("data", str);
目標activity中:
Bundle bundle = getIntent().getExtras();
String str = bundle.getString("data");
上面只是簡單的說明一下如何傳輸字符串。
那麼如何傳輸對象呢?這貨比較特殊,不能像putExtra("data", Object)這樣進行傳輸,沒有這種方法。
在重載方法中可以找到兩個比較特殊的方法:
putExtra(String name, Serializable value):intent
putExtra(String name, Parcelable value):intent
Serializable和Parcelable分別是兩個接口,那麼要傳輸對象,則只需要使得類實現這兩個接口之一就行了。
我們先來看一下Serializable實現,創建一個類Obj並且實現該接口:
import java.io.Serializable;
public class Obj implements Serializable{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
當前activity:
Obj obj = new Obj();
obj.setName("李剛");
intent.putExtra("data", obj);
目標activity:
Bundle bundle = getIntent().getExtras();
Obj obj = (Obj) bundle.get("data");
String name = obj.getName();
再來看一下Parcelable實現,創建一個類Obj2並且實現該接口:
import android.os.Parcel;
import android.os.Parcelable;
public class Obj2 implements Parcelable{
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public int describeContents() {
return 0;
}
/*
* 創建CREATOR常量(必須要這樣做)
* */
public static Parcelable.Creator<Obj2> CREATOR = new Creator<Obj2>() {
@Override
public Obj2[] newArray(int size) {
return null;
}
/*
* 重寫createFromParcel方法
* */
@Override
public Obj2 createFromParcel(Parcel source) {
//通過讀取Parcel類對象的屬性,來set當前類的屬性
Obj2 obj2 = new Obj2();
obj2.setName(source.readString());
obj2.setAge(source.readString());
return obj2;
}
};
/*將對象屬性保存到Parcel類對象中*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(age);
}
}
看起來是不是要比實現Serializable接口要複雜的多?但是這種方法要好多的,主要是該方法速度快,性能好(一般用這種)。
當前activity:
Obj2 obj2 = new Obj2();
obj2.setName("李剛");
obj2.setAge("38歲");
intent.putExtra("s1", obj2);
目標activity:
Bundle bundle = getIntent().getExtras();
Obj2 obj2 = (Obj2) bundle.get("s1");
String name = obj2.getName();
String age = obj2.getAge();
以上就是兩種實現對象傳輸的方法。
THE END~