欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中Intent傳遞對(duì)象的3種方式詳解

 更新時(shí)間:2016年09月29日 08:42:18   投稿:daisy  
這篇文章給大家介紹了Android中Intent傳遞對(duì)象的3種方式,分別是Serializable 方式、Parcelable 方式以及JSON 方式,有需要的朋友們可以一起參考借鑒,下面來(lái)一起看看吧。

前言

相信Intent的用法大家已經(jīng)比較熟悉了,Intent可以用來(lái)啟動(dòng)Activity,Service等等,同時(shí)我們也可以通過(guò)Intent來(lái)進(jìn)行傳遞數(shù)據(jù),當(dāng)我們使用Intent在Activity 間傳遞信息時(shí)發(fā)現(xiàn)putExtra() 方法并不支持自定義對(duì)象的傳輸,下面就來(lái)介紹三種解決方式。

一、Serializable 方式

這是最簡(jiǎn)單的一種方法,因?yàn)槲覀円龅木褪亲屛覀冏远x的對(duì)象實(shí)現(xiàn) Serializable 這個(gè)空接口。

public class Person implements Serializable{
    private String mName;
    private String mAddress;

    public String getName() {
      return mName;
    }

    public void setName(String name) {
        mName = name;
    }

    public String getAddress() {
        return mAddress;
    }

    public void setAddress(String address) {
        mAddress = address;
    }
}

這個(gè)時(shí)候,就已經(jīng)可以使用Intent 的putExtra() 方法傳遞這個(gè)自定義對(duì)象了,在Activity中這樣使用

      Person person = new Person();
      person.setName("Hwaphon");
      person.setAddress("Anhui");

      Intent intent = new Intent(MainActivity.this,SecondActivity.class);
      intent.putExtra("person",person);
      startActivity(intent);
      finish();

在Activity中接收數(shù)據(jù)

 Intent intent = getIntent();
Person person = (Person) intent.getSerializableExtra("person");

使用Serializable方法雖然十分簡(jiǎn)單,但是效率卻不容樂(lè)觀,因?yàn)樗鼤?huì)把整個(gè)對(duì)象序列化,開(kāi)銷(xiāo)十分大,為了追求效率,我們不得不使用另一種方法,也就是Parcelable 方法。

二、Parcelable 方式

令自定義類(lèi)實(shí)現(xiàn)Parcelable接口,這個(gè)時(shí)候必須重寫(xiě)兩個(gè)方法

     1. describeContents() : 用于描述內(nèi)容接口,一般直接 return 0即可

     2. writeToParcel()  : 用于將想要傳遞的數(shù)據(jù)寫(xiě)入到Parcel容器中。

除了這兩個(gè)方法以外,我們還需要?jiǎng)?chuàng)建一個(gè) Parcelable.Creator接口的實(shí)現(xiàn),這個(gè)接口中也需要我們實(shí)現(xiàn)兩個(gè)方法

     1. createFromParcel() : 用于將寫(xiě)入Parcel容器中的數(shù)據(jù)讀出來(lái),用讀出來(lái)的數(shù)據(jù)實(shí)例化一個(gè)對(duì)象,并且返回。

     2. newArray() :創(chuàng)建一個(gè)長(zhǎng)度為 size 的數(shù)組并且返回,一般而言,直接返回return T[size] 即可。

public class Person implements Parcelable{
    private String mName;
    private String mAddress;

    public String getName() {
      return mName;
    }

    public void setName(String name) {
      mName = name;
    }

    public String getAddress() {
        return mAddress;
    }

    public void setAddress(String address) {
      mAddress = address;
    }

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

    @Override
    public void writeToParcel(Parcel parcel, int i) {
      parcel.writeString(mName);
      parcel.writeString(mAddress);
    }

  public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>(){
      @Override
        public Person createFromParcel(Parcel parcel) {
          Person person = new Person();
          person.mName = parcel.readString();
          person.mAddess = parcel.readString();
          return person;
      }

      @Override
      public Person[] newArray(int i) {
          return new Person[i];
      }
    };
}

這個(gè)時(shí)候的接收方法與Serializable有點(diǎn)不同,如下

 Intent intent = getIntent();
 Person person = (Person) intent.getParcelableExtra("person");

writeToParcel()方法中,我們可以將我們想要的數(shù)據(jù)寫(xiě)入容器,如果是我們不需要的數(shù)據(jù),那么我們可以放棄寫(xiě)入,這也是Parcelabel 方法比 Serializable方法高效的原因所在。但是,這種方法比Serializable 方法多了太多的實(shí)現(xiàn)代碼了,有沒(méi)有什么辦法能改變這一現(xiàn)狀呢?可以使用插件一鍵生成這些代碼,比如說(shuō) Android Parcelable code generator 插件,可以直接在Android Studio Plugins去下載該插件,下載完之后 點(diǎn)擊 Alt+Insert就可以看到Parcelable選項(xiàng)了。

三、JSON 方式

這個(gè)時(shí)候自定義對(duì)象類(lèi)為

public class Person{
    private String mName;
    private String mAdress;

    public String getName() {
      return mName;
    }

    public void setName(String name) {
      mName = name;
    }

    public String getAdress() {
        return mAdress;
    }

    public void setAdress(String adress) {
      mAdress = adress;
    }
  }

使用方式

 //Send
 Intent intent = new Intent(MainActivity.this,SecondActivity.class);

 intent.putExtra("person",new Gson().toJson(person));


// Receive
 Intent intent = getIntent();
 String JsonData = intent.getStringExtra("person");
 Person person = new Gson().fromJson(JsonData,Person.class);

在使用時(shí)別忘了導(dǎo)入Gson 包,否則是無(wú)法使用的。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望能對(duì)各位Android開(kāi)發(fā)者們有所幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • 使用OkHttp包在Android中進(jìn)行HTTP頭處理的教程

    使用OkHttp包在Android中進(jìn)行HTTP頭處理的教程

    HTTP頭部處理是HTTP網(wǎng)絡(luò)編程中的基本操作,安卓中使用OkHttp包(github.com/square/okhttp)進(jìn)行相關(guān)操作當(dāng)然也是得心應(yīng)手,這里我們就來(lái)看一下使用OkHttp包在Android中進(jìn)行HTTP頭處理的教程
    2016-07-07
  • Android控件ToggleButton多狀態(tài)按鈕使用詳解

    Android控件ToggleButton多狀態(tài)按鈕使用詳解

    這篇文章主要為大家詳細(xì)介紹了Android控件ToggleButton多狀態(tài)按鈕的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android相機(jī)啟動(dòng)加速詳解

    Android相機(jī)啟動(dòng)加速詳解

    本篇文章給大家詳細(xì)分析了Android實(shí)現(xiàn)相機(jī)啟動(dòng)加速的相關(guān)知識(shí)點(diǎn)內(nèi)容以及實(shí)例代碼,有興趣的朋友參考下。
    2018-07-07
  • 詳解Android MacAddress 適配心得

    詳解Android MacAddress 適配心得

    本篇文章主要介紹了詳解Android MacAddress 適配心得,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 詳解Android 消息處理機(jī)制

    詳解Android 消息處理機(jī)制

    這篇文章主要介紹了Android 消息處理機(jī)制的相關(guān)資料,幫助大家更好的進(jìn)行Android開(kāi)發(fā),感興趣的朋友可以了解下
    2020-10-10
  • Android獲取手機(jī)的版本號(hào)等信息的代碼

    Android獲取手機(jī)的版本號(hào)等信息的代碼

    這篇文章主要為大家詳細(xì)介紹了Android獲取手機(jī)的版本號(hào)等信息的代碼,代碼很精彩,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Android中AlertDialog各種對(duì)話框的用法實(shí)例詳解

    Android中AlertDialog各種對(duì)話框的用法實(shí)例詳解

    這篇文章主要介紹了Android中AlertDialog各種對(duì)話框的用法在項(xiàng)目開(kāi)發(fā)中經(jīng)常用的到,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值
    2016-04-04
  • 淺談Android中多線程切換的幾種方法

    淺談Android中多線程切換的幾種方法

    本篇文章主要介紹了淺談Android中多線程切換的幾種方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • flutter輪子計(jì)劃之進(jìn)度條

    flutter輪子計(jì)劃之進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了flutter輪子計(jì)劃之進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Android實(shí)現(xiàn)用戶登錄記住密碼功能

    Android實(shí)現(xiàn)用戶登錄記住密碼功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)用戶登錄記住密碼功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評(píng)論