Intent 传递数据

1、Intent传递基本数据类型

传递

Intent intent=new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra("key","value");

取出

String s=getIntent().getStringExtra("key");

还有一些其他的基本数据类型都可以以这样的形式传递获取,只需要在getStringExtra的地方将String换成对应数据类型就可以了,有几个方法可以带默认值,比如getIntent().getIntExtra(“number”,1);

2、Intent传递对象

而对象传递方式主要有以下两种

(1)实现Serializable接口implements Serializable,这种思想是通过序列化的方式,序列化就是让对象以流的形式存在,可以存储在本地,也可以在网络上传输。因为对象不能直接传输,所以就使用这种可传输的形式。但是效率对比实现Parcelable要低一些,使用要简单一些。

使用方式直接让待传递的对象实现Serializable接口 ,在Activity中读取的时候和基本数据类型的读取一样。

自己实现一个Person类

Intent intent=new Intent(MainActivity.this,Main2Activity.class);
Person person=new Person();
person.setName("hahha");
person.setId(123);
intent.putExtra("Serializable",person);
startActivity(intent);

获取

Person person1=(Person)getIntent().getSerializableExtra("Serializable");
        System.out.println(person1.getName());

(2) 也可以实现Parcelable思想是将对象分解成可以直接传输的基本数据类型进行传输

对比Serializable要复杂一些

import android.os.Parcel;
import android.os.Parcelable;

public class Person implements Parcelable {
    private String name;

    protected Person(Parcel in) {
        name = in.readString();//读取
        id = in.readInt();
    }

    public static final Creator<Person> CREATOR = new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel in) {
            return new Person(in);
        }

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

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);//写入
        dest.writeInt(id);
    }

    public String getName() {
        return name;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    private int id;

    public void setName() {

    }
}

因为要实现接口里的一些方法

首先是写入 writeToParcel() dest.writexxx()方法一一写入。 读取,采用in.readxxx(),要注意的是读取和写入顺序一定要一致。

describeContents() 一般返回0就行了

还有这个CREATOR ,创建了Parcelable.create的一种实现,重写 方法createFromParcel( newArray()只需要返回数组大小,要有泛型。

 public static final Creator<Person> CREATOR = new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel in) {
            return new Person(in);
        }

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

传递时候和Serializable使用一样,获取的时候

Person person1=(Person)getIntent().getParcelableExtra("Parcelable");
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值