博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android——通过Intent传递一些二进制数据的方法有哪些
阅读量:6157 次
发布时间:2019-06-21

本文共 7242 字,大约阅读时间需要 24 分钟。

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接口。

 

 

转自:

 

Demo:

 

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

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

  1. 1 
    2
    7
    12
    18
    24

     

 

第三步:新建两个类一个是Person.实现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
    CREATOR = new Creator
    () { 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 
    2
    6
    7
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

     

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

效果1:首界面:

效果2:点击Serializable按钮

效果3:点击Parcelable按钮:

 

转载地址:http://hwsfa.baihongyu.com/

你可能感兴趣的文章
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
查看>>
java中string和int的相互转换
查看>>
P1666 前缀单词
查看>>
HTML.2文本
查看>>
Ubuntu unity安装Indicator-Multiload
查看>>
解决Eclipse中新建jsp文件ISO8859-1 编码问题
查看>>
7.对象创建型模式-总结
查看>>
【论文阅读】Classification of breast cancer histology images using transfer learning
查看>>
移动端处理图片懒加载
查看>>
jQuery.on() 函数详解
查看>>
谈缓存和Redis
查看>>
【转】百度地图api,根据多点注标坐标范围计算地图缩放级别zoom自适应地图
查看>>
用户调研(补)
查看>>
ExtJS之开篇:我来了
查看>>
☆1018
查看>>
oracle 去掉空格
查看>>
6.13心得
查看>>
Runtime类
查看>>
eclipse decompiler
查看>>
记一个搜索网盘资源的网站
查看>>