Android——通过Intent传递一些二进制数据的方法有哪些

1、方法

(1)使用Serializable接口实现序列化。利用Bundle.putSerializable(Key, Object);这里objec对象需要实现serializable接口。

(2)实现Parcelable接口串行化。利用Bundle.putParcelable(Key, Object);这里Object对象需要实现Parcelable接口。

 

2、两者区别:

(1)在使用内存的时候,Parcelable类比Serializable性能高,所以推荐使用Parcelable类。

(2)Serializable在序列化的时候会产生大量的临时变量。

(3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,也不提倡用,但在这种情况下还是建议使用Serializable。

3、实现:

(1)Serializable的实现,只需要继承implements Serializable即可。这只是给对象打了一个标记,系统会自动将其序列化。

(2)Parcelable的实现,需要在类中添加一个静态成员变量CREATOR(必须是public,否则报错),这个变量需要继承Parcelable.Creator接口。

 

 

转自:http://blog.csdn.net/wulongtiantang/article/details/7937094

 

Demo:

 

第一步:新建一个Android工程命名为ObjectTranDemo(类比较多哦!)目录结构如下图:

第二步:修改main.xml布局文件(这里我增加了两个按钮)代码如下

  1.  1 <?xml version="1.0" encoding="utf-8"?>  
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
     3     android:orientation="vertical"  
     4     android:layout_width="fill_parent"  
     5     android:layout_height="fill_parent"  
     6     >  
     7 <TextView    
     8     android:layout_width="fill_parent"   
     9     android:layout_height="wrap_content"   
    10     android:text="Welcome to Mr wei's blog."  
    11     />  
    12 <Button  
    13     android:id="@+id/button1"  
    14     android:layout_width="fill_parent"  
    15     android:layout_height="wrap_content"  
    16     android:text="Serializable"  
    17 />  
    18 <Button  
    19     android:id="@+id/button2"  
    20     android:layout_width="fill_parent"  
    21     android:layout_height="wrap_content"  
    22     android:text="Parcelable"  
    23 />  
    24 </LinearLayout>   

     

 

第三步:新建两个类一个是Person.Java实现Serializable接口,另一个Book.java实现Parcelable接口,代码分别如下:

Person.java:

 

  1.  1 package com.tutor.objecttran;  
     2 import java.io.Serializable;  
     3 public class Person implements Serializable {  
     4     private static final long serialVersionUID = -7060210544600464481L;   
     5     private String name;  
     6     private int age;  
     7     public String getName() {  
     8         return name;  
     9     }  
    10     public void setName(String name) {  
    11         this.name = name;  
    12     }  
    13     public int getAge() {  
    14         return age;  
    15     }  
    16     public void setAge(int age) {  
    17         this.age = age;  
    18     }  
    19       
    20 }  

     

 

Book.java:

  1.  1 package com.tutor.objecttran;  
     2 import android.os.Parcel;  
     3 import android.os.Parcelable;  
     4 public class Book implements Parcelable {  
     5     private String bookName;  
     6     private String author;  
     7     private int publishTime;  
     8       
     9     public String getBookName() {  
    10         return bookName;  
    11     }  
    12     public void setBookName(String bookName) {  
    13         this.bookName = bookName;  
    14     }  
    15     public String getAuthor() {  
    16         return author;  
    17     }  
    18     public void setAuthor(String author) {  
    19         this.author = author;  
    20     }  
    21     public int getPublishTime() {  
    22         return publishTime;  
    23     }  
    24     public void setPublishTime(int publishTime) {  
    25         this.publishTime = publishTime;  
    26     }  
    27       
    28     public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() {  
    29         public Book createFromParcel(Parcel source) {  
    30             Book mBook = new Book();  
    31             mBook.bookName = source.readString();  
    32             mBook.author = source.readString();  
    33             mBook.publishTime = source.readInt();  
    34             return mBook;  
    35         }  
    36         public Book[] newArray(int size) {  
    37             return new Book[size];  
    38         }  
    39     };  
    40       
    41     public int describeContents() {  
    42         return 0;  
    43     }  
    44     public void writeToParcel(Parcel parcel, int flags) {  
    45         parcel.writeString(bookName);  
    46         parcel.writeString(author);  
    47         parcel.writeInt(publishTime);  
    48     }  
    49 }  

     

 

第四步:修改ObjectTranDemo.java,并且新建两个Activity,一个是ObjectTranDemo1.java,别一个是ObjectTranDemo2.java.分别用来显示Person对像数据,和Book对象数据:,代码分别如下:

ObjectTranDemo.java:

  1.  1 package com.tutor.objecttran;  
     2 import android.app.Activity;  
     3 import android.content.Intent;  
     4 import android.os.Bundle;  
     5 import android.view.View;  
     6 import android.view.View.OnClickListener;  
     7 import android.widget.Button;  
     8 public class ObjectTranDemo extends Activity implements OnClickListener {  
     9       
    10     private Button sButton,pButton;  
    11     public  final static String SER_KEY = "com.tutor.objecttran.ser";  
    12     public  final static String PAR_KEY = "com.tutor.objecttran.par";  
    13     public void onCreate(Bundle savedInstanceState) {  
    14         super.onCreate(savedInstanceState);  
    15         setContentView(R.layout.main);     
    16         setupViews();  
    17           
    18     }  
    19       
    20     //我的一贯作风呵呵  
    21     public void setupViews(){  
    22         sButton = (Button)findViewById(R.id.button1);  
    23         pButton = (Button)findViewById(R.id.button2);  
    24         sButton.setOnClickListener(this);  
    25         pButton.setOnClickListener(this);  
    26     }  
    27     //Serializeable传递对象的方法  
    28     public void SerializeMethod(){  
    29         Person mPerson = new Person();  
    30         mPerson.setName("frankie");  
    31         mPerson.setAge(25);  
    32         Intent mIntent = new Intent(this,ObjectTranDemo1.class);  
    33         Bundle mBundle = new Bundle();  
    34         mBundle.putSerializable(SER_KEY,mPerson);  
    35         mIntent.putExtras(mBundle);  
    36           
    37         startActivity(mIntent);  
    38     }  
    39     //Pacelable传递对象方法  
    40     public void PacelableMethod(){  
    41         Book mBook = new Book();  
    42         mBook.setBookName("Android Tutor");  
    43         mBook.setAuthor("Frankie");  
    44         mBook.setPublishTime(2010);  
    45         Intent mIntent = new Intent(this,ObjectTranDemo2.class);  
    46         Bundle mBundle = new Bundle();  
    47         mBundle.putParcelable(PAR_KEY, mBook);  
    48         mIntent.putExtras(mBundle);  
    49           
    50         startActivity(mIntent);  
    51     }  
    52     //铵钮点击事件响应  
    53     public void onClick(View v) {  
    54         if(v == sButton){  
    55             SerializeMethod();  
    56         }else{  
    57             PacelableMethod();  
    58         }  
    59     }  
    60 }  

     

 

ObjectTranDemo1.java:

  1.  1 package com.tutor.objecttran;  
     2 import android.app.Activity;  
     3 import android.os.Bundle;  
     4 import android.widget.TextView;  
     5 public class ObjectTranDemo1 extends Activity {  
     6     @Override  
     7     public void onCreate(Bundle savedInstanceState) {  
     8         super.onCreate(savedInstanceState);  
     9           
    10         TextView mTextView = new TextView(this);  
    11         Person mPerson = (Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);  
    12         mTextView.setText("You name is: " + mPerson.getName() + "/n"+  
    13                 "You age is: " + mPerson.getAge());  
    14           
    15         setContentView(mTextView);  
    16     }  
    17 }  

     

 

ObjectTranDemo2.java:

  1.  1 package com.tutor.objecttran;  
     2 import android.app.Activity;  
     3 import android.os.Bundle;  
     4 import android.widget.TextView;  
     5 public class ObjectTranDemo2 extends Activity {  
     6    
     7     public void onCreate(Bundle savedInstanceState) {  
     8         super.onCreate(savedInstanceState);  
     9         TextView mTextView = new TextView(this);  
    10         Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);  
    11         mTextView.setText("Book name is: " + mBook.getBookName()+"/n"+  
    12                           "Author is: " + mBook.getAuthor() + "/n" +  
    13                           "PublishTime is: " + mBook.getPublishTime());  
    14         setContentView(mTextView);  
    15     }  
    16 }  

     

 

第五步:比较重要的一步啦,修改AndroidManifest.xml文件(将两个新增的Activity,ObjectTranDemo1,ObjectTranDemo2)申明一下代码如下(第14,15行):

 
  1.  1 <?xml version="1.0" encoding="utf-8"?>  
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
     3       package="com.tutor.objecttran"  
     4       android:versionCode="1"  
     5       android:versionName="1.0">  
     6     <application android:icon="@drawable/icon" android:label="@string/app_name">  
     7         <activity android:name=".ObjectTranDemo"  
     8                   android:label="@string/app_name">  
     9             <intent-filter>  
    10                 <action android:name="android.intent.action.MAIN" />  
    11                 <category android:name="android.intent.category.LAUNCHER" />  
    12             </intent-filter>  
    13         </activity>  
    14         <activity android:name=".ObjectTranDemo1"></activity>  
    15         <activity android:name=".ObjectTranDemo2"></activity>  
    16     </application>  
    17     <uses-sdk android:minSdkVersion="7" />  
    18 </manifest>   

     

第六步:运行上述工程查看效果图啦:

效果1:首界面:

效果2:点击Serializable按钮

效果3:点击Parcelable按钮:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值