android Parcelable序列化数组String[]

package com.semisky.midLevel.aidl;

import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;

public class AutoIPCMessage implements Parcelable {
	private static final String TAG = "Service-->AutoIPCMessage";
	public static final String BROADCAST = "";
	public String mSrcPackageName;   //发起该消息的app包名
	public String mDstPackageName;   //接收该消息的app包名,如果为空,表示广播
	public int mAction;              //发起的动作意图
	public String[] mParam = null;   //实际参数

	public AutoIPCMessage(String srcPackageName,String dstPackageName,int action,String[] param) {
		mSrcPackageName = srcPackageName;
		mDstPackageName = dstPackageName;
		mAction = action;
		mParam = param;
	}
	
	@Override
	public int describeContents() {
		// TODO Auto-generated method stub
		return 0;
	}
	
	@Override
	public void writeToParcel(Parcel dest, int flags) {
		//这里是把对象的字段一个一个写到流里面,写的顺序要和下面读的顺序一摸一样
		Log.d(TAG,"writeToParcel " + this.toString());
		dest.writeString(mSrcPackageName);
		dest.writeString(mDstPackageName);
		dest.writeInt(mAction);
		//这几句话是写数组的,因为数组的长度不确定,所以先确定数组长度,如果为空就不写,但是要把0给发过去
        //让下面的好判断能不能读数组,也就是说下面如果读到的长度是0,那么就不读数组了,否则就创建相同长度的数组去读
		if(mParam == null) {
			dest.writeInt(0);
		} else {
			dest.writeInt(mParam.length);
			dest.writeStringArray(mParam);
		}
	}
	/*
	 * 反序列化,开始读对象的流顺序要和上面写的一样  
	 */
	private AutoIPCMessage(Parcel source) {
		Log.d(TAG,"AutoIPCMessage read");
		mSrcPackageName = source.readString();
		mDstPackageName = source.readString();
		mAction = source.readInt();
		//开始读数组的长度
		int length = source.readInt();
		//如果数组长度大于0,那么就读数组, 所有数组的操作都可以这样。  
        if(length>0){  
        	mParam = new String[length];  
            source.readStringArray(mParam);
        }  
	}
	
	public static final Parcelable.Creator<AutoIPCMessage> CREATOR = new Parcelable.Creator<AutoIPCMessage>() {

		@Override
		public AutoIPCMessage createFromParcel(Parcel source) {
			return new AutoIPCMessage(source);
		}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值