Android中的数据传递之Parcelable接口

对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通 过Intent实现的。 Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。 实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现 Serializable接口高,而且还可以用在进程间通信(IPC)中。实现Serializable接口非常简单,声明一下就可 以了。而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。

Parcelable接口的 作用:实现了Parcelable接口的实例可以将自身的状态信息(状态信息通常指的是各成员变量的值)写入 Parcel,也可以从Parcel中恢复其状态。

Parcel用来完成数据的序列化传递。下面就介绍一下实现 Parcelable接口的方法。

通过实现Parcelable接口序列化对象的步骤:

1、实现Parcelable接口。

2、并且实现Parcelable接口的public

void writeToParcel(Parcel dest, int flags)方法

3、自定义类型中必须含有一个名称为CREATOR的静态成员,该成员对象要求实现Parcelable.Creator接口 及其方法。

简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将 Parcel对象映射成你的对象。也可以将Parcel看成是一个流 ,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你 来实现,因此写的顺序和读的顺序必须一致。

newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可

示例代码:

import android.os.Parcel;
import android.os.Parcelable;   

public class Person implements Parcelable {
      //这里定义了两个变量来说明读和写的顺序要一致
     private Integer id;
     private String name;   

     public Person() {
     }   

     public Person(Integer id, String name) {   

         this.id = id;
         this.name = name;
     }   

     public Integer getId() {
         return id;
     }   

     public void setId(Integer id) {
         this.id = id;
     }   

     public String getName() {
         return name;
     }   

     public void setName(String name) {
         this.name = name;
     }   

     @Override
     public int describeContents() {
         return 0;
     }   

     @Override
     public void writeToParcel(Parcel dest, int flags) {
         // 把javanbean中的数据写到Parcel。先写id然后写name
         dest.writeInt(this.id);
         dest.writeString(this.name);
     }   

     // 添加一个静态成员,名为CREATOR,该对象实现了Parcelable.Creator接口
     public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
         @Override
         public Person createFromParcel(Parcel source) {
             // 从Parcel中读取数据,返回person对象
             return new Person(source.readInt(), source.readString());
         }   

         @Override
         public Person[] newArray(int size) {
             return new Person[size];
         }
     };
 }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, 接口
, public
, name
, parcel
, android传递数据android
, Parcelable
, Android序列化
, Parcel机制
android实现接口
android 接口传递数据、android 传递接口对象、接口传递数据、接口回调传递数据、接口数据分页传递,以便于您获取更多的相关知识。

时间: 2024-08-18 02:48:35

Android中的数据传递之Parcelable接口的相关文章

修改按钮-Android中adapter数据传递出去与控制activity中按钮状态

问题描述 Android中adapter数据传递出去与控制activity中按钮状态 1C 求大神告知,我在adapter中获得了数据,是一个List 现在我在包适配器的这个activity中要用这个List如何将数据传递到activity中去呢?或者说我在activity中如何调用这个数据呢?还有一个问题,我在adapter中 viewHolder.imageIsCheck.setTag(position); convertView.setOnClickListener(new Content

c++-Android中通过JNI传递图片数据的问题(IplImage和Bitmap)

问题描述 Android中通过JNI传递图片数据的问题(IplImage和Bitmap) 我的C++代码在Visual Studio中运行是正常的,输入和输出图片如下: 在安卓中使用native函数调用此C++代码,显示结果如下: 部分代码如下: c++ int* SharedMatting::getResult(int w, int h){ int intsize = w*h; int* outImage = new int[intsize]; IplImage *tempp = new Ip

Android 中Activity 之间传递参数

Android 中Activity 之间传递参数 1.传递简单数据 在A Activity中 findViewById(R.id.startBActicityBtn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,TheActivity.class); // 对基础的数据类型进行传递 i.

android中ListView数据刷新时的同步方法

  本文实例讲述了android中ListView数据刷新时的同步方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

详细分析Android中onTouch事件传递机制_Android

onTach介绍 ontach是Android系统中整个事件机制的基础.Android中的其他事件,如onClick.onLongClick等都是以onTach为基础的. onTach包括从手指按下到离开手机屏幕的整个过程,在微观形式上,具体表现为action_down.action_move和action_up等过程. onTach两种主要定义形式如下: 1.在自定义控件中,常见的有重写onTouchEvent(MotionEvent ev)方法.如在开发中经常可以看到重写的onTouchEv

Android中Json数据读取与创建的方法

首先介绍下JSON的定义,JSON是JavaScript Object Notation的缩写. 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. JSON的结构: (1) Name/Value Pairs(无序的):类似所熟知的Keyed list. Hash table.Disctiona

详细分析Android中onTouch事件传递机制

onTach介绍 ontach是Android系统中整个事件机制的基础.Android中的其他事件,如onClick.onLongClick等都是以onTach为基础的. onTach包括从手指按下到离开手机屏幕的整个过程,在微观形式上,具体表现为action_down.action_move和action_up等过程. onTach两种主要定义形式如下: 1.在自定义控件中,常见的有重写onTouchEvent(MotionEvent ev)方法.如在开发中经常可以看到重写的onTouchEv

Android中Intent使用Serializable和Parcelable传递对象

Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧! 第一步:新建一个Android工程命名为ObjectTranDemo(类比较

【转】android中的数据存取-方式一:preference(配置)

    这种方式应该是用起来最简单的Android读写外部数据的方法了.他的用法基本上和J2SE(java.util.prefs.Preferences)中的用法一样,以一种简单. 透明的方式来保存一些用户个性化设置的字体.颜色.位置等参数信息.一般的应用程序都会提供"设置"或者"首选项"的这样的界面,那么这些设置最后就可以 通过Preferences来保存,而程序员不需要知道它到底以什么形式保存的,保存在了什么地方.当然,如果你愿意保存其他的东西,也没有什么限制.