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

来源:互联网 发布:妹子语音软件 编辑:程序博客网 时间:2024/05/22 05:06

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

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

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

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

IntentputExtras(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 plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. LoginActivity跳转到PersonCenterActivity。  

[java] view plaincopyprint?在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 plaincopyprint?在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 plaincopyprint?在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 plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. AccountInfo account = (AccountInfo) getIntent().getSerializableExtra("account");  

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


接受对象:

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

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

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

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


原创链接:http://blog.csdn.net/withiter/article/details/16946659
0 0
原创粉丝点击