Android 技术之Serializable和Parcelable方式
来源:互联网 发布:mplayer 1.3 windows 编辑:程序博客网 时间:2024/06/05 08:52
Serializable和Parcelable方式
对于初学者来说,一般看到这两个方式都不知道是干嘛用的,我也是看了一些资料才看到学到的。(有空还是多学学吧,毕竟为了老婆本啊!)
首先大概说一下,相信很多人都知道Intent 在activity中传递对象的方式:
Intent intent = new Intent(); intent.setClass(MainActivity.this,twoActivty.class); intent.putExtra("name","wang"); intent.putExtra("age",1); startActivity(intent);
很简单吧!我们可以在intent 里面添加一些数据,达到传值的效果,然后我们只需要在需要用的activity中:
getInten().getStringExtra("name");getInten().getIntExtra("age");
但是你可很简单的看到,这个传值是有限制的,就是它支持的数据类型是有限的,如果你想要去传一些自定义对象的时候,呵呵呵!
这个时候你就可以用到Serializable和Parcelable方式了!!!!
(1)Serializable
字面上的意思就是序列化的意思,它可以将一个对象转化成 可以存储的或者可以传输的状态,然后你可以在网络上传输,也可以在本地上存储 ,它就是一个接口,你只需要在bean中implements Serializable(就这么简单)
public class Per implements Serializable{ private String user; private int p; public Per(String user, int p) { this.user = user; this.p = p; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public int getP() { return p; } public void setP(int p) { this.p = p; }}
这样所有的Per对象都是可序列化了,其中get和set方法都是用骨赋值和读取字段数据的,然后我们在第一个activity中:
button = (Button) findViewById(R.id.sss); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(),twoActivty.class); Per p= new Per("SS",54); intent.putExtra("ss",p); startActivity(intent); } });
接着,在你需要用到的activity中 :
Per p = (Per) getIntent().getSerializableExtra("ss"); ss.setText(+"getUser:"+p.getUser()+"\n"+"getP:"+p.getP());
拿到Per后,然后向下转型成Per对象,p.getUser就是你想拿到的东西了!
(2)Parcelable
Parcelable实现的原理是将一个完整的对象进行分解,然后分解出来的每一部分就是Intent所支持的数据类型,这样就可以实现传递对象的功能了!直接上代码:
public class Stu implements Parcelable { private String name; private int age; public Stu() { } public Stu(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); //写出name dest.writeInt(age); //写出age } public static final Parcelable.Creator<Stu> CREATOR = new Parcelable.Creator<Stu>(){ @Override public Stu[] newArray(int size) { return new Stu[size]; } @Override public Stu createFromParcel(Parcel source) { Stu s = new Stu(); s.name = source.readString(); //读取name s.age = source.readInt(); // 读取age return s; } };}
这时,你会发现好像好复杂,其实刚才我又写到,这是把他们分解,别总是觉得和Serializable对比起来多了好多行,然后就不去看一下代码怎么写到,如果你认真看一下就。。。。(哦哦哦)
其中需要注意一个地方就是字符串类型就要写成 writeString(),整形数据就是writeIntent()方法,以此类推
还有必须实现两个方法,describeContents和writeToParcel (看字面意思就知道什么意思了,除非你不懂英文,这我就没办法帮你了)
describeContents()直接返回0 就好了
最后,还必须在这个Stu中提供一个名为CREATOR 的常量 ,是固定的 ,
Parcelable.Creator接口的一个实现 ,然后泛型就是我们自定义的Stu ,newArray和createFromParcel这两个方法要记得重写。
最后,需要注意的地方就是
“getIntent().getParcelableExtra(“ss”);
其他都是一样的啦!!!!!!
总结一下吧,两个方式对比的话,前面的会比较简单,但是由于把整个对象都序列化了,效率一定比不过后者,所以你就可以根据你的需求选择一下实现吧!
谢谢!这是本人写的第三篇,写的不好,少喷啊!发现才会用这个编辑器,,哎哎哎啊!以后再加上图片和其他的!
- Android 技术之Serializable和Parcelable方式
- android:Serializable 方式和 Parcelable 方式
- Android 序列化之Serializable和Parcelable
- android: Serializable 和 Parcelable
- 【Android】Serializable和Parcelable
- Android中两种序列化方式的比较Serializable和Parcelable
- Android中两种序列化方式的比较Serializable和Parcelable
- Android中两种序列化方式的比较Serializable和Parcelable
- [android] Serializable 和 Parcelable 区别
- android---- Serializable 和 Parcelable 区别
- android---- Serializable 和 Parcelable 区别
- [android] Serializable 和 Parcelable 区别
- [android] Serializable 和 Parcelable 区别
- [android] Serializable 和 Parcelable 区别
- [android] Serializable 和 Parcelable 区别
- [android] Serializable 和 Parcelable 区别
- [android] Serializable 和 Parcelable 区别
- [android] Serializable 和 Parcelable 区别
- CSS超链接
- 微信自动发朋友圈 支持 文字,图片 小视频等等
- html5 manifest缓存
- 第01期:ubuntu下淘宝网Tengine服务器的搭建
- 机器学习-分类和逻辑回归
- Android 技术之Serializable和Parcelable方式
- 函数中实参到形参的传递
- Docker平台构成及执行流程
- Oracle的字段名不能和变量名一样,否则会无效
- 解读 SetupOfflineStoreEnvironment
- 优雅的方式了解每个程序
- C++成员函数的重载、覆盖与隐藏
- Orcale的to_char和to_date函数
- bzoj 3544: [ONTAK2010]Creative Accounting treap