Android序列化的兩種方式

在Android中經(jīng)常會在兩個Activity之間傳輸數(shù)據(jù),又很多種方法可以實(shí)現(xiàn)椎工,比如寫在文件中,用SharedPreferences等等都可以實(shí)現(xiàn),現(xiàn)在來介紹的是使用序列化的方式來傳輸數(shù)據(jù)馋劈。Android序列化一共有兩種方式,一種是實(shí)現(xiàn)Serializable接口晾嘶,另一種就是實(shí)現(xiàn)Parcelable接口妓雾。

實(shí)現(xiàn)Serializable接口

實(shí)現(xiàn)Serializable非常簡單,只需要實(shí)現(xiàn)這個接口就可以了垒迂,沒有實(shí)現(xiàn)Parcelable接口那么復(fù)雜械姻。

/**
 * 實(shí)現(xiàn)Serializable接口
 */
public class Student implements Serializable {

    private String name;
    private String sex;

    public Student() {

    }

    public Student(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

實(shí)現(xiàn)Parcelable接口

實(shí)現(xiàn)Parcelable接口比實(shí)現(xiàn)Serializable復(fù)雜了很多,但效率更高机断,是Android推薦的序列化方式楷拳。

/**
 * 實(shí)現(xiàn)Parcelable
 */
public class Teacher implements Parcelable {
    private String name;
    private String sex;


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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
        dest.writeString(this.sex);
    }

    public Teacher() {
    }

    public Teacher(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    protected Teacher(Parcel in) {
        this.name = in.readString();
        this.sex = in.readString();
    }

    public static final Parcelable.Creator<Teacher> CREATOR = new Parcelable.Creator<Teacher>() {
        @Override
        public Teacher createFromParcel(Parcel source) {
            return new Teacher(source);
        }

        @Override
        public Teacher[] newArray(int size) {
            return new Teacher[size];
        }
    };

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

看到實(shí)現(xiàn)Parcelable接口是不是瞬間就懵逼了,用AndroidStudio的的可以安裝一個插件吏奸,可以自動的將實(shí)現(xiàn)Parcelable接口欢揖。來張效果圖大家感受下。(插件的名字叫Android parcelable code generator)

具體應(yīng)用

上面我們已經(jīng)實(shí)現(xiàn)了這兩個接口奋蔚,那么怎么來使用用這個呢她混?接下來就來用個demo來演示下,Student實(shí)現(xiàn)
Serializable接口旺拉,Teacher實(shí)現(xiàn)Parcelable接口产上,將這兩個類從MainActivity傳輸給SecondActivity并在SecondActivity中顯示出來。

Student.java


/**
 * 實(shí)現(xiàn)Serializable接口
 */
public class Student implements Serializable {

    private String name;
    private String sex;

    public Student() {

    }

    public Student(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}


Teacher


/**
 * 實(shí)現(xiàn)Parcelable
 */
public class Teacher implements Parcelable {
    private String name;
    private String sex;


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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
        dest.writeString(this.sex);
    }

    public Teacher() {
    }

    public Teacher(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    protected Teacher(Parcel in) {
        this.name = in.readString();
        this.sex = in.readString();
    }

    public static final Parcelable.Creator<Teacher> CREATOR = new Parcelable.Creator<Teacher>() {
        @Override
        public Teacher createFromParcel(Parcel source) {
            return new Teacher(source);
        }

        @Override
        public Teacher[] newArray(int size) {
            return new Teacher[size];
        }
    };

    @Override
    public String toString() {
        return "Teacher{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}


MainActivity.java

public class MainActivity extends AppCompatActivity {

    private Button mButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mButton = (Button) findViewById(R.id.button);

        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);

                Bundle bundle = new Bundle();
                Teacher teacher = new Teacher("teacher", "man");
                bundle.putParcelable("teacher", teacher);
                Student student = new Student("student", "femal");
                bundle.putSerializable("student", student);
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });

    }
}


SecondActivity.java


public class SecondActivity extends AppCompatActivity {

    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        mTextView = (TextView) findViewById(R.id.textview);

        Intent intent = getIntent();
        mTextView.append(intent.getExtras().getSerializable("student").toString() + "\n");
        mTextView.append(intent.getExtras().getParcelable("teacher").toString());


    }
}

運(yùn)行結(jié)果

到這里Android序列化已經(jīng)介紹完了蛾狗。

本博客同步發(fā)表在http://hjxandhmr.github.io/2016/06/19/Android-SerializeMethod/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晋涣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沉桌,更是在濱河造成了極大的恐慌谢鹊,老刑警劉巖算吩,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異佃扼,居然都是意外死亡偎巢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門兼耀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來压昼,“玉大人,你說我怎么就攤上這事瘤运∏舷迹” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵拯坟,是天一觀的道長但金。 經(jīng)常有香客問我,道長郁季,這世上最難降的妖魔是什么冷溃? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮梦裂,結(jié)果婚禮上似枕,老公的妹妹穿的比我還像新娘。我一直安慰自己年柠,他們只是感情好菠净,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彪杉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牵咙。 梳的紋絲不亂的頭發(fā)上派近,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音洁桌,去河邊找鬼渴丸。 笑死,一個胖子當(dāng)著我的面吹牛另凌,可吹牛的內(nèi)容都是我干的谱轨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吠谢,長吁一口氣:“原來是場噩夢啊……” “哼土童!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起工坊,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤献汗,失蹤者是張志新(化名)和其女友劉穎敢订,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體罢吃,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡楚午,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了尿招。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矾柜。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖就谜,靈堂內(nèi)的尸體忽然破棺而出怪蔑,到底是詐尸還是另有隱情,我是刑警寧澤吁伺,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布饮睬,位于F島的核電站,受9級特大地震影響篮奄,放射性物質(zhì)發(fā)生泄漏捆愁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一窟却、第九天 我趴在偏房一處隱蔽的房頂上張望昼丑。 院中可真熱鬧,春花似錦夸赫、人聲如沸菩帝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呼奢。三九已至,卻和暖如春切平,著一層夾襖步出監(jiān)牢的瞬間握础,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工悴品, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留禀综,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓苔严,卻偏偏與公主長得像定枷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子届氢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容