【Android开发那点破事】Android2个Activity之间传递对象

今天的破事,我们来聊聊在Android中,如果在两个Activity之间传递对象。

首先我们知道利用Intent的putExtra方法放入要传递的数据。看看API上的函数:

Intent putExtra( String name, double[] value)
Add extended data to the intent.
Intent putExtra( String name, int value)
Add extended data to the intent.
Intent putExtra( String name,  CharSequence value)
Add extended data to the intent.
Intent putExtra( String name, char value)
Add extended data to the intent.
Intent putExtra( String name,  Bundle value)
Add extended data to the intent.
Intent putExtra( String name,  Parcelable[] value)
Add extended data to the intent.
Intent putExtra( String name,  Serializable value)
Add extended data to the intent.
Intent putExtra( String name, int[] value)
Add extended data to the intent.
Intent putExtra( String name, float value)
Add extended data to the intent.
Intent putExtra( String name, byte[] value)
Add extended data to the intent.
Intent putExtra( String name, long[] value)
Add extended data to the intent.
Intent putExtra( String name,  Parcelable value)
Add extended data to the intent.
Intent putExtra( String name, float[] value)
Add extended data to the intent.
Intent putExtra( String name, long value)
Add extended data to the intent.
Intent putExtra( String name,  String[] value)
Add extended data to the intent.
Intent putExtra( String name, boolean value)
Add extended data to the intent.
Intent putExtra( String name, boolean[] value)
Add extended data to the intent.
Intent putExtra( String name, short value)
Add extended data to the intent.
Intent putExtra( String name, double value)
Add extended data to the intent.
Intent putExtra( String name, short[] value)
Add extended data to the intent.
Intent putExtra( String name,  String value)
Add extended data to the intent.
Intent putExtra( String name, byte value)
Add extended data to the intent.
Intent putExtra( String name, char[] value)
Add extended data to the intent.
Intent putExtra( String name,  CharSequence[] value)
Add extended data to the intent.
Intent putExtras( Intent src)
Copy all extras in 'src' in to this intent.
Intent putExtras( Bundle extras)
Add a set of extended data to the intent.
Intent putIntegerArrayListExtra( String name,  ArrayList< Integer> value)
Add extended data to the intent.
Intent putParcelableArrayListExtra( String name,  ArrayList<? extends  Parcelable> value)
Add extended data to the intent.
Intent putStringArrayListExtra( String name,  ArrayList< String> value)
Add extended data to the intent.

从上面的方法发现,没有直接放入object的函数。但是有一个

Intent putExtras( Bundle extras)
Add a set of extended data to the intent.
没错,我们就是用Intent.putExtras(Bundle extras)来传递对象。生成Bundle对象时有两种放入对象的方式

一是Bundle.putSerializable(Key,Object);

二是采用Bundle.putParcelable(Key, Object);

其中前面一种方法中的Object要实现Serializable接口,后面一种方法中的Object要实现Parcelable接口。

结合我的项目来说下。首先在你跳转前的Activity设置bundle,这里我是想从

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. LoginActivity跳转到PersonCenterActivity。  

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. Intent intent = new Intent();  
  2. intent.setClass(LoginActivity.this, PersonCenterActivity.class);  
  3. // 新建Bundle对象  
  4. Bundle mBundle = new Bundle();    
  5. // 放入account对象  
  6. mBundle.putSerializable("account", (AccountInfo)msg.obj);    
  7. intent.putExtras(mBundle);    
  8. startActivity(intent);  

说明,这里的AccountInfo需要实现Serializable接口。

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. public class AccountInfo implements Serializable {  
  2.   
  3.     /** 
  4.      *  
  5.      */  
  6.     private static final long serialVersionUID = 9060527069391618394L;  
  7.   
  8.     public String userId;  
  9.     public String accountId;  
  10.     public String phone;  
  11.   
  12.     public String email;  
  13.     public String password;  
  14.     public String nickName;  
  15.     public String birthday;  
  16.     public String userImage;  
  17.     public String enable;  
  18.     public String mobileOS;  
  19.     public String signIn;  
  20.     public String isSignIn;  
  21.   
  22.     public String isAuto = "false";  
  23.     public String msg;  
  24.     public String lastLogin;  
  25.   
  26.     public String getAccountId() {  
  27.         return accountId;  
  28.     }  
  29.   
  30.     public void setAccountId(String accountId) {  
  31.         this.accountId = accountId;  
  32.     }  
  33.   
  34.     public String getSignIn() {  
  35.         return signIn;  
  36.     }  
  37.   
  38.     public void setSignIn(String signIn) {  
  39.         this.signIn = signIn;  
  40.     }  
  41.   
  42.     public String getIsSignIn() {  
  43.         return isSignIn;  
  44.     }  
  45.   
  46.     public void setIsSignIn(String isSignIn) {  
  47.         this.isSignIn = isSignIn;  
  48.     }  
  49.   
  50.     public void setMsg(String msg) {  
  51.         this.msg = msg;  
  52.     }  
  53.   
  54.     public void setUserId(String userId) {  
  55.         this.userId = userId;  
  56.     }  
  57.   
  58.     public void setPhone(String phone) {  
  59.         this.phone = phone;  
  60.     }  
  61.   
  62.     public void setEmail(String email) {  
  63.         this.email = email;  
  64.     }  
  65.   
  66.     public void setPassword(String password) {  
  67.         this.password = password;  
  68.     }  
  69.   
  70.     public void setNickName(String nickName) {  
  71.         this.nickName = nickName;  
  72.     }  
  73.   
  74.     public void setBirthday(String birthday) {  
  75.         this.birthday = birthday;  
  76.     }  
  77.   
  78.     public void setUserImage(String userImage) {  
  79.         this.userImage = userImage;  
  80.     }  
  81.   
  82.     public void setEnable(String enable) {  
  83.         this.enable = enable;  
  84.     }  
  85.   
  86.     public void setMobileOS(String mobileOS) {  
  87.         this.mobileOS = mobileOS;  
  88.     }  
  89.   
  90.     public void setLastLogin(String lastLogin) {  
  91.         this.lastLogin = lastLogin;  
  92.     }  
  93.   
  94.     public String getIsAuto() {  
  95.         return isAuto;  
  96.     }  
  97.   
  98.     public void setIsAuto(String isAuto) {  
  99.         if (StringUtils.isNotNull(isAuto)) {  
  100.             this.isAuto = isAuto;  
  101.         } else {  
  102.             this.isAuto = "false";  
  103.         }  
  104.     }  
  105.   
  106.     public String getUserId() {  
  107.         return userId;  
  108.     }  
  109.   
  110.     public String getPhone() {  
  111.         return phone;  
  112.     }  
  113.   
  114.     public String getEmail() {  
  115.         return email;  
  116.     }  
  117.   
  118.     public String getPassword() {  
  119.         return password;  
  120.     }  
  121.   
  122.     public String getNickName() {  
  123.         return nickName;  
  124.     }  
  125.   
  126.     public String getBirthday() {  
  127.         return birthday;  
  128.     }  
  129.   
  130.     public String getUserImage() {  
  131.         return userImage;  
  132.     }  
  133.   
  134.     public String getEnable() {  
  135.         return enable;  
  136.     }  
  137.   
  138.     public String getMobileOS() {  
  139.         return mobileOS;  
  140.     }  
  141.   
  142.     public String getMsg() {  
  143.         return msg;  
  144.     }  
  145.   
  146.     public String getLastLogin() {  
  147.         return lastLogin;  
  148.     }  
  149.   
  150.     public void build(LoginInfo loginInfo) {  
  151.         this.msg = loginInfo.msg;  
  152.         this.accountId = loginInfo.accountId;  
  153.         this.phone = loginInfo.phone;  
  154.         this.email = loginInfo.email;  
  155.         this.password = loginInfo.password;  
  156. this.nickName = loginInfo.nickName;  
  157. this.birthday = loginInfo.birthday;  
  158. this.userImage = loginInfo.userImage;  
  159. this.enable = loginInfo.enable;  
  160. this.mobileOS = loginInfo.mobileOS;  
  161. this.lastLogin = loginInfo.lastLogin;  
  162. this.signIn = loginInfo.signIn;  
  163. this.isSignIn = loginInfo.isSignIn;  
  164.      }  
  165. }  

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. Intent mIntent = new Intent(this,xxx.class);   
  2. Bundle mBundle = new Bundle();   
  3. mBundle.putParcelable("key", account);   
  4. mIntent.putExtras(mBundle);   
  5. startActivity(mIntent);  


最后我们在PersonCenterActivity中onCreate方法中用下面的方法取得account对象

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. AccountInfo account = (AccountInfo) getIntent().getSerializableExtra("account");  

Parcelable 方式和这基本类似,这里不展开讲了。注意要传递的对象需要实现implements Parcelable。
 


接受对象:

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. Account account = (Account)getIntent().getParcelableExtra("key");  

是不是很简单,其实就这点破事。

好了今天这个破事就到这里,其实android开发就这么点破事。关于其他破事,见专栏:

更多Android开发的破事,请看专栏:《Android开发那点破事》


原创链接:http://blog.csdn.net/withiter/article/details/16946659
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值