使用Intent传递对象的好处
来源:互联网 发布:淘宝上宝贝卖点怎么写 编辑:程序博客网 时间:2024/05/01 20:48
背景
在某些情况下,我们需要使用到Intent去传递一个自定义对象,这样能够减少许多不必要的代码。查阅一下,传递的对象类需要实现Serializable接口或Parcelable接口,下面我们来介绍一下如何选择,及如何传递。
Serializable与Parcelable的选择
Serializable是JavaSE本身就支持的,Parcelable是Android特有功能,效率比实现Serializable接口高效,可用于Intent数据传递,也可以用于进程间通信。Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。
不使用Intent传递对象
如果不使用Intent传递对象,我们的代码可能会增加非常多,比如以下在Activity之间传递一个商品属性的代码:
在商品列表页,点击打开商品详情页:
Intent intent=new Intent(this,GoodsDetailActivity.class);intent.putExtra(Constants.INTENT_KEY_GOODS_ID,mGoodsList.get(position).getProductCode()); intent.putExtra(Constants.INTENT_KEY_GOODS_IMG_URL,mGoodsList.get(position).getProductUrl());intent.putExtra(Constants.INTENT_KEY_GOODS_NAME,mGoodsList.get(position).getProductName()); intent.putExtra(Constants.INTENT_KEY_GOODS_PRICE,mGoodsList.get(position).getRetailPrice());startActivity(intent);
在商品详情页获取Intent中的数据,若商品详情页还需要传递该商品参数到其他页面,还需要在其他页面重复写这部分代码:
String goodsId=getIntent().getStringExtra(Constants.INTENT_KEY_GOODS_ID);String imgUrl=getIntent().getStringExtra(Constants.INTENT_KEY_GOODS_IMG_URL);String goodsName=getIntent().getStringExtra(Constants.INTENT_KEY_GOODS_NAME);String goodsPrice=getIntent().getStringExtra(Constants.INTENT_KEY_GOODS_PRICE);
而且要在常量类中定义:
public static final String INTENT_KEY_GOODS_ID="intent_key_goods_id";public static final String INTENT_KEY_GOODS_IMG_URL="intent_key_goods_img_url";public static final String INTENT_KEY_GOODS_NAME="intent_key_goods_name";public static final String INTENT_KEY_GOODS_PRICE="intent_key_goods_price";
使用Intent传递实现Parcelable接口的对象
1.定义一个商品参数对应的实体类:
public class GoodsItemEntity implements Parcelable { private String retailPrice; private String productName; private String productCode; private String productUrl; private String productId; public String getProductCode() { return productCode; } public void setProductCode(String productCode) { this.productCode = productCode; } public String getProductId() { return productId; } public void setProductId(String productId) { this.productId = productId; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public String getProductUrl() { return productUrl; } public void setProductUrl(String productUrl) { this.productUrl = productUrl; } public String getRetailPrice() { return retailPrice; } public void setRetailPrice(String retailPrice) { this.retailPrice = retailPrice; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(retailPrice); dest.writeString(productName); dest.writeString(productCode); dest.writeString(productUrl); dest.writeString(productId); } public static final Creator<GoodsItemEntity> CREATOR = new Creator<GoodsItemEntity>() { @Override public GoodsItemEntity[] newArray(int size) { return new GoodsItemEntity[size]; } @Override public GoodsItemEntity createFromParcel(Parcel in) { return new GoodsItemEntity(in); } }; public GoodsItemEntity(Parcel in) { retailPrice = in.readString(); productName = in.readString(); productCode = in.readString(); productUrl = in.readString(); productId = in.readString(); }}
2.在商品列表页,其中goodsItemEntity是要传递的对象。
Intent intent = new Intent(activity, GoodsDetailActivity.class);Bundle bundle=new Bundle();bundle.putParcelable(Constants.INTENT_KEY_GOODS_ITEM,goodsItemEntity);intent.putExtras(bundle);activity.startActivity(intent);
3.商品详情页,接受该数据:
GoodsItemEntity mGoodsItemEntity=getIntent().getParcelableExtra(Constants.INTENT_KEY_GOODS_ITEM);String goodsId=mGoodsItemEntity.getProductId();
0 0
- 使用Intent传递对象的好处
- 使用Intent传递对象
- 使用Intent传递对象
- 使用Intent 传递对象
- 使用Intent传递对象
- 使用Intent传递对象
- 使用Intent传递对象
- Android --- 使用Intent传递对象的方式
- 如何使用Intent传递对象
- Android-使用Intent传递对象
- 使用Intent传递自定义对象
- 使用Intent传递对象数据
- android Intent 对象的传递
- 全局获取Context的技巧,使用intent来传递对象
- 使用Intent传递对象的两种方式
- 使用Intent传递对象的两种方式
- Android使用Intent传递对象的两种方式
- 使用Intent传递自定义类对象出现的特殊情况
- 前端AngularJS,项目的组织结构
- MySQL定义异常和异常处理方法
- 第七章 上机二
- 并发框架Disruptor译文
- Linux常用指令备忘
- 使用Intent传递对象的好处
- Myeclipse导出项目制作成一个可执行的jar
- 初
- 前端参考文档及资源整理(持续更新)
- 排序
- 被忽略的shell技巧
- C#获取视频流
- HttpWebRequest的GetResponse或GetRequestStream 超时决办法
- Material design学习笔记-CoordinatorLayout,NestedScrollView,AppBarLayout,CollapsingToolbarLayout学习