Android中对象的传递
来源:互联网 发布:网络销售是怎么做的 编辑:程序博客网 时间:2024/06/01 09:59
我们知道,当我们在两个activity中传输 实体类对象 的时候有三种方法。第一、实现Serializable接口,这种比较简单,直接声明就好;第二种,实现Parcelable接口,这种方式就比较复杂,往往需要写多些代码去实现,不过效率就比较高;第三种,转换为json传递。
我们先看看实现Serializable接口的方法
首先创建一个实体类,实现serializable接口
public class GirlFriend implements Serializable{ private String name; private Integer age; private String location; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; }}
然后我们创建两个activity A和B
public class TestActivityA extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //创建一个按钮 TextView tvClick = new TextView(this); tvClick.setText("来点我啊,点我获取对象"); setContentView(tvClick); //创建一个实体类对象 GirlFriend girlF = new GirlFriend(); girlF.setName("喵喵喵"); girlF.setAge(18); girlF.setLocation("西安培华学院"); //点击传递对象到下一个页面 final Intent intent = new Intent(); Bundle bun = new Bundle(); bun.putSerializable("girlF",girlF); intent.putExtras(bun); intent.setClass(this,TestActivityB.class); tvClick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(intent); } }); }}
activityB:
public class TestActivityB extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this); setContentView(textView); GirlFriend girlFriend = (GirlFriend) getIntent().getSerializableExtra("girlF"); textView.setText("你获得了一个新女朋友\n名字叫:" + girlFriend.getName() + "\n年龄为:" + girlFriend.getAge() + "\n现在所在位置:" + girlFriend.getLocation() ); }}
这就就实现了我们用serializable来传递对象了。
如果传递的是List<Object>,可以把list强转成Serializable类型,而且object类型也必须实现了Serializable接口
Intent.putExtras(key, (Serializable)list)
接收
(List<Object>)getIntent().getSerializable(key)
实现Parcelabel 接口
首先是我们的实体类
我们先生成 getter setter方法。
然后我们在光标位置按Alt+Insert 会弹出如下菜单:
我们选择Parcelable选项,然后进入我们的变量选择框:
然后点击OK 就为我们生成了完成的Parcelable的代码:
public class GirlFriend implements Parcelable{ private String name; private Integer age; private String location; public String getName() {return name;} public void setName(String name) {this.name = name;} public Integer getAge() {return age;} public void setAge(Integer age) {this.age = age;} public String getLocation() {return location;} public void setLocation(String location) {this.location = location;} @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.name); dest.writeValue(this.age); dest.writeString(this.location); } public GirlFriend() { } protected GirlFriend(Parcel in) { this.name = in.readString(); this.age = (Integer) in.readValue(Integer.class.getClassLoader()); this.location = in.readString(); } public static final Creator<GirlFriend> CREATOR = new Creator<GirlFriend>() { @Override public GirlFriend createFromParcel(Parcel source) { return new GirlFriend(source); } @Override public GirlFriend[] newArray(int size) { return new GirlFriend[size]; } };}
接着 我们在Activity中来传递:
还是用我们上面的两个activity ,只需要把A中的 putSerializable 改为 putParcelable 即可。
然后在B中。也是只改接收的那一句:
这样我们的 用parcelable 传递对象也就完成了。
转换为json传递
这种方法里面,我们的实体类GirlFriend 里面 什么接口都不用实现,实现getter setter方法就行。
然后在A中传递时候为:
在B中接收为:
其他的什么都不用改。就完成了这种方式的传递。
为什么选择Parcelable
从上面的两种方法来看。明显的实现Serializable 接口的写法简单。尽管我们用了Android Parcelabel code generator 插件之后 实现Parcelable 接口的写法也简单了许多,但是终归还是比用Serializable 多一步。那么什么时候需要用Parcelable 呢? 那就是 效率!效率!效率!
附上一个别人的测试连接:http://blog.prolificinteractive.com/2014/07/18/why-we-love-parcelable/
参考了:为什么说Parcelable 比Serializable更高效
- Android中对象的传递
- Android中Intent传递对象
- Android中Intent传递对象的两种方法!
- Android中intent传递对象和Bundle的用法
- android中Intent传递对象的实现方法
- Android中Intent传递Java对象的方法
- Android中传递对象的三种方法
- Android中intent传递对象和Bundle的用法
- Android中传递对象的三种方法
- Android中传递对象的三种方法
- Android中Intent传递自定义对象类型的数据
- Android中Intent传递类对象的方法一(Serializable)
- Android中Intent传递类对象的方法二(Parcelable)
- android中intent传递list或者对象的方法
- Android中传递对象的三种方法
- Android中intent传递list或者对象的方法
- Android中intent传递对象和Bundle的用法
- android中intent传递list或者对象的方法
- tf.clip_by_global_norm理解
- 图像物体分类与检测算法综述
- POJ2142 The Balance(扩展欧几里得算法)
- LeetCode 035 Search Insert Position
- Android-快速开发框架2017-持续更新(一)。
- Android中对象的传递
- linux io阻塞问题
- idea14 解决卡顿问题
- 数据的迁移
- 策略模式(Strategy Pattern)
- 经典 C语言 socket SERVER,CLIENT 端代码实现
- 最全面、最易懂的Android屏幕适配解决方案
- ACM谨记
- Java Final修饰符存储位置以及作用意义