zoukankan      html  css  js  c++  java
  • Intent传递对象的两种方法

    Android为intent提供了两种传递对象参数类型的方法

    分别需要使实体类实现Serializable接口、Parcelable接口

    首先我们要知道,传递对象,需要先将对象序列化

    一、那么为什么要对象序列化

     1、永久性保存对象,保存对象的字节序列到本地文件中;

     2、用过序列化对象在网络中、进程间传递对象;

    二、序列化对象什么时候实现Serializable接口,什么时候实现Parcelable接口接口

    1、Parcelable不能使用将数据存储在磁盘上,因为Parcelable在外界有变化的情况下不能很好的保存数据的持续性。

       因此在这种情况下,建议使用Serializable

    2、在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable类。

         并且Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。

    ----------------------------------------------------------------------------------------------------------

    下面看下两种传递对象方式的使用方法

    一、实体类继承Serializable接口的方式

    1、第一步,将我们需要传送的对象所属的实体类实现Serializable接口

    复制代码
     1 package com.xqx.IntentDemo;
     2 3 import java.io.Serializable;
     4 5 /**
     6  * People实体类,含有 name,sex,age三个属性  ,并实现类的封装
     7  */ 8 public class People implements Serializable {
     9     private String name;
    10     private String sex;
    11     private int age;
    1213     public String getName() {
    14         return name;
    15     }
    1617     public String getSex() {
    18         return sex;
    19     }
    2021     public int getAge() {
    22         return age;
    23     }
    2425     public void setName(String name) {
    26         this.name = name;
    27     }
    2829     public void setSex(String sex) {
    30         this.sex = sex;
    31     }
    3233     public void setAge(int age) {
    34         this.age = age;
    35     }
    36 }
    复制代码

    2、传递数据步骤

    复制代码
           //创建Intent对象
            Intent intent = new Intent();
            intent.setClass(MainActivity.this, NewActivity.class);
            //创建实体类
            People people = new People();
            people.setName("Mark");
            people.setSex("boy");
            people.setAge(20);
            //添加传送数据
            intent.putExtra("people", people);
            startActivity(intent);
    复制代码

    3、接收数据

         Intent intent = getIntent();
            People people = (People) intent.getSerializableExtra("people");
            Log.i("DATA_SHOW","name-->"+people.getName()+",sex-->"+people.getSex()+",age-->"+people.getAge());

    4、Log打印

    15794-15794/? I/DATA_SHOW﹕ name-->Mark,sex-->boy,age-->20

    二、实体类继承Parcelable接口的方式

    1、实体类实现Parcelable接口

    public class Student implements Parcelable {}

    重写接口的两个方法

    复制代码
        @Override
        public int describeContents() {
            return 0;
        }
         
    // 将对象的需要传递的属性 以 Parcel parcel.writXxx的形式写出,具体看属性的类型 @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeString(name); parcel.writeString(sex); parcel.writeInt(age); }
    复制代码

    添加一个常量CREATOR(名字大小必须固定),该常量必须实现Parcelable的内部接口:Parcelable.Creator,并实现该接口中的两个方法

    复制代码
    public static final Parcelable.Creator<Student> CREATOR = new Creator<Student>() {
    
            @Override
            public Student createFromParcel(Parcel source) {
                Student student = new Student();
                student.name = source.readString();
                student.sex = source.readString();
                student.age = source.readInt();
                return student;
            }
    
            @Override
            public Student[] newArray(int size) {
                return new Student[size];
            }
        };
    复制代码

    2、传递数据

    复制代码
         Intent intent = new Intent();
            intent.setClass(MainActivity.this, NewActivity.class);
            Student student = new Student();
            student.setName("Alice");
            student.setSex("girl");
            student.setAge(19);
            intent.putExtra("student",student);
            startActivity(intent);
    复制代码

    3、接收数据

         Intent intent = getIntent();
            Student student = intent.getParcelableExtra("student");
            Log.i("DATA_SHOW","name-->"+student.getName()+",sex-->"+student.getSex()+",age-->"+student.getAge());

    4、Log日志

    1280-1280/? I/DATA_SHOW﹕ name-->Alice,sex-->girl,age-->19
  • 相关阅读:
    认识hasLayout——IE浏览器css bug的一大罪恶根源 转
    web网站p教程 转
    可遇不可求的Question之SQLServer的INSERT ON DUPLICATE KEY UPDATE语法篇
    可遇不可求的Question之Protoc.exe无法编译proto文件篇
    python各个版本的下载地址
    可遇不可求的Question之WCF发布无法运行篇
    [转]理解JSON:3分钟课程
    可遇不可求的Question之Silverlight发布IIS设置篇
    可遇不可求的Question之C#中的匿名事件导致内存泄露的解决篇
    可遇不可求的Question之mysql连接数暴增的解决方法篇
  • 原文地址:https://www.cnblogs.com/earl-yongchang/p/4929408.html
Copyright © 2011-2022 走看看