时间:2021-05-20
前言
相信Intent的用法大家已经比较熟悉了,Intent可以用来启动Activity,Service等等,同时我们也可以通过Intent来进行传递数据,当我们使用Intent在Activity 间传递信息时发现putExtra() 方法并不支持自定义对象的传输,下面就来介绍三种解决方式。
一、Serializable 方式
这是最简单的一种方法,因为我们要做的就是让我们自定义的对象实现 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; }}这个时候,就已经可以使用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中接收数据
Intent intent = getIntent();Person person = (Person) intent.getSerializableExtra("person");使用Serializable方法虽然十分简单,但是效率却不容乐观,因为它会把整个对象序列化,开销十分大,为了追求效率,我们不得不使用另一种方法,也就是Parcelable 方法。
二、Parcelable 方式
令自定义类实现Parcelable接口,这个时候必须重写两个方法
1. describeContents() : 用于描述内容接口,一般直接 return 0即可
2. writeToParcel() : 用于将想要传递的数据写入到Parcel容器中。
除了这两个方法以外,我们还需要创建一个 Parcelable.Creator接口的实现,这个接口中也需要我们实现两个方法
1. createFromParcel() : 用于将写入Parcel容器中的数据读出来,用读出来的数据实例化一个对象,并且返回。
2. newArray() :创建一个长度为 size 的数组并且返回,一般而言,直接返回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()方法中,我们可以将我们想要的数据写入容器,如果是我们不需要的数据,那么我们可以放弃写入,这也是Parcelabel 方法比 Serializable方法高效的原因所在。但是,这种方法比Serializable 方法多了太多的实现代码了,有没有什么办法能改变这一现状呢?可以使用插件一键生成这些代码,比如说 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 包,否则是无法使用的。
总结
以上就是这篇文章的全部内容了,希望能对各位Android开发者们有所帮助,如果有疑问大家可以留言交流。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在Android中intent传递对象主要有2种方式分别是,Bundle.putSerializable(Key,Object)和Bundle.putParc
Android中,Activity和Fragment之间传递对象,可以通过将对象序列化并存入Bundle或者Intent中进行传递,也可以将对象转化为JSON字
AndroidIntent传递对象的两种方法(Serializable,Parcelable)详细介绍今天要给大家讲一下Android中Intent中如何传递对
本文实例分析了Android编程使用Intent传递对象的方法。分享给大家供大家参考,具体如下:之前的文章中,介绍过Intent的用法,比如启动活动,发送广播,
Android中的Intent是一个非常重要的类,如果对Intent不是特别了解,可以参见《详解Android中Intent的使用方法》。如果对IntentFi