最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中Intent傳遞對象的3種方式詳解

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

前言

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

一、Serializable 方式

這是最簡單的一種方法,因為我們要做的就是讓我們自定義的對象實現(xiàn) Serializable 這個空接口。

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;
    }
}

這個時候,就已經(jīng)可以使用Intent 的putExtra() 方法傳遞這個自定義對象了,在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方法雖然十分簡單,但是效率卻不容樂觀,因為它會把整個對象序列化,開銷十分大,為了追求效率,我們不得不使用另一種方法,也就是Parcelable 方法。

二、Parcelable 方式

令自定義類實現(xiàn)Parcelable接口,這個時候必須重寫兩個方法

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

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

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

     1. createFromParcel() : 用于將寫入Parcel容器中的數(shù)據(jù)讀出來,用讀出來的數(shù)據(jù)實例化一個對象,并且返回。

     2. newArray() :創(chuà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];
      }
    };
}

這個時候的接收方法與Serializable有點不同,如下

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

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

三、JSON 方式

這個時候自定義對象類為

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);

在使用時別忘了導入Gson 包,否則是無法使用的。

總結(jié)

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

相關文章

  • Android實現(xiàn)二級購物車的全選加反選、總價功能

    Android實現(xiàn)二級購物車的全選加反選、總價功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)二級購物車的全選加反選、總價功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Android?PopUpWindow實現(xiàn)卡片式彈窗

    Android?PopUpWindow實現(xiàn)卡片式彈窗

    大家好,本篇文章主要講的是Android?PopUpWindow實現(xiàn)卡片式彈窗,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Android控件之ProgressBar用法實例分析

    Android控件之ProgressBar用法實例分析

    這篇文章主要介紹了Android控件之ProgressBar用法,以一個完整實例形式較為詳細的分析了ProgressBar控件操作進度顯示的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • flutter實現(xiàn)發(fā)送驗證碼功能

    flutter實現(xiàn)發(fā)送驗證碼功能

    這篇文章主要為大家詳細介紹了flutter發(fā)送驗證碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 詳解Android中Notification通知提醒

    詳解Android中Notification通知提醒

    這篇文章主要為大家介紹了Android中Notification通知提醒,本文演示了普通的通知和自定義視圖通知
    2016-01-01
  • ViewModel中StateFlow和SharedFlow單元測試使用詳解

    ViewModel中StateFlow和SharedFlow單元測試使用詳解

    這篇文章主要為大家介紹了ViewModel中StateFlow和SharedFlow單元測試使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 淺談Android編碼規(guī)范及命名規(guī)范

    淺談Android編碼規(guī)范及命名規(guī)范

    本文主要總結(jié)一下Android項目的開發(fā)規(guī)范:1、編碼規(guī)范 2、命名規(guī)范。有需要的朋友可以看下
    2016-12-12
  • android仿支付寶密碼輸入框效果

    android仿支付寶密碼輸入框效果

    這篇文章主要為大家詳細介紹了android仿支付寶密碼輸入框效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 詳解Flutter中的數(shù)據(jù)傳遞

    詳解Flutter中的數(shù)據(jù)傳遞

    這篇文章主要介紹了Flutter中的數(shù)據(jù)傳遞的相關資料,幫助大家更好的理解和學習使用Flutter,感興趣的朋友可以了解下
    2021-04-04
  • Kotlin?this關鍵字的使用實例詳解

    Kotlin?this關鍵字的使用實例詳解

    這篇文章主要介紹了Kotlin?this關鍵字的使用實例,在Kotlin中,this關鍵字允許我們引用一個類的實例,該類的函數(shù)恰好正在運行。此外,還有其他方式可以使this表達式派上用場
    2023-02-02

最新評論

南阳市| 获嘉县| 宁城县| 自治县| 微山县| 离岛区| 巨野县| 五常市| 赣榆县| 石首市| 遂溪县| 清丰县| 嘉兴市| 康平县| 台中县| 翁牛特旗| 和田县| 绥江县| 漳浦县| 潼关县| 资中县| 东宁县| 顺昌县| 习水县| 兴和县| 都江堰市| 资溪县| 广汉市| 那曲县| 克什克腾旗| 通州市| 大冶市| 昌江| 阜平县| 靖江市| 贵阳市| 明光市| 岱山县| 深泽县| 盐源县| 建平县|