Android -- Intent传递对象的三种方法
2017-06-13 20:25
253 查看
最近在做Android的项目,遇到一个问题就是:如何用Intent传递自定义数据类型。找到了这篇文章,还是不错的。
原文:http://www.jianshu.com/p/49851bd6a522
当我们使用
这是最简单的一种方法,因为我们要做的就是让我们自定义的对象实现
这个时候,就已经可以使用
在
使用
令自定义类实现
1.
2.
除了这两个方法以外,我们还需要创建一个
1.
2.
这个时候的接收方法与
在
点击
这个时候自定义对象类为
使用方式
在使用时别忘了导入
附注:
我已将
Parcelable code generator : http://pan.baidu.com/s/1eRmUgLG
GSON : http://pan.baidu.com/s/1nubQw5b
原文:http://www.jianshu.com/p/49851bd6a522
当我们使用
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 包,否则是无法使用的。
附注:
我已将
Gson和
Parcelable code generator JAR包上传到我的百度云盘,有需要的可以去下载
Parcelable code generator : http://pan.baidu.com/s/1eRmUgLG
GSON : http://pan.baidu.com/s/1nubQw5b
相关文章推荐
- Android -- Intent传递对象的三种方法
- Android中Intent传递对象的两种方法(Bundle.putParcelable/putSerializable)!
- Android中传递对象的三种方法
- Android开发中Intent传递对象的方法分析
- Android中intent传递list或者对象的方法
- Android中传递对象的三种方法
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- android中intent传递list或者对象的方法
- Android中Intent传递类对象的方法二(Parcelable)
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- Android中传递对象的三种方法的实现
- 详解Android中Intent传递对象给Activity的方法
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- 14. Android Intent传递对象的两种方法
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- Android中Intent传递对象的两种方法:Serializable & Parcelable
- Android中使用Intent在Activity之间传递对象(使用Serializable或者Parcelable)的方法