- package com.example.demo_app.paracble;
-
- import android.os.Parcel;
- import android.os.Parcelable;
- import android.util.Log;
-
- public class Person implements Parcelable{
-
- public String name ;
- public int age ;
- public String[] msg ;
- public int garde ;
- public Son son ;
-
- @Override
- public int describeContents() {
- Log.v("Tag", " describeContents ");
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- Log.v("Tag", this+" ------> writeToParcel "+flags);
- //这里是把对象的字段一个一个写到流里面,写的顺序要和下面读的顺序一摸一样
-
- dest.writeInt(age);
- dest.writeString(name);
-
- //这几句话是写数组的,因为数组的长度不确定,所以先确定数组长度,如果为空就不写,但是要把0 给发过去
- //让下面的好判断能不能读数组,也就是说下面如果读到的长度是0,那么就不读数组了,否则就创建相同长度的数组去读
- if(msg==null){
- dest.writeInt(0);
- }else{
- dest.writeInt(msg.length);
- }
- //如果数组为空,就可以不写
- if(msg!=null){
- dest.writeStringArray(msg);
- }
-
-
- dest.writeInt(garde);
- dest.writeParcelable(son, flags);
- }
-
- public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
-
- @Override
- public Person[] newArray(int size) {
- Log.w("Tag", " person new Array : "+size);
- return new Person[size];
- }
-
- @Override
- public Person createFromParcel(Parcel source) {
- //开始读对象的流顺序要和上面写的一样
- Log.w("Tag", " createFromParcel ");
- int age = source.readInt();
- String name = source.readString() ;
-
- //开始读数组的长度
- int length = source.readInt() ;
- Log.v("Tag", " length : "+length);
- String[] msg = null ;
- //如果数组长度大于0,那么就读数组, 所有数组的操作都可以这样。
- if(length>0){
- msg = new String[length];
- source.readStringArray(msg);
- }
-
- int grade = source.readInt() ;
- Son son = source.readParcelable(Son.class.getClassLoader());
- Log.i("Tag", " son : "+son);
-
- Person p = new Person();
- p.age = age ;
- p.name = name ;
- p.msg = msg ;
- p.garde = grade ;
- p.son = son ;
- Log.d("Tag", p + " -- > name : "+p.name +" , age : "+p.age+" , garde : "+p.garde+" , son : "+p.son+" , msg : "+p.msg+" length : "+length);
- return p ;
- }
- };
- }
这个是普通的Parcelable对象- package com.example.demo_app.paracble;
-
- import android.os.Parcel;
- import android.os.Parcelable;
-
- public class Son implements Parcelable{
-
- public String name ;
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeString(name);
- }
-
- public static final Creator<Son> CREATOR = new Creator<Son>() {
-
- @Override
- public Son createFromParcel(Parcel source) {
- Son s = new Son();
- s.name = source.readString();
- return s;
- }
-
- @Override
- public Son[] newArray(int size) {
- return new Son[size];
- }
-
- };
-
- }
|