您的位置:首页 > 移动开发 > Objective-C

android Parcelable 带有数组的对象如何序列化 String[] Long[] int[] Object[]

2013-11-14 23:59 549 查看
android Parcelable 带有数组的对象如何序列化 String[] Long[] int[] Object[]
这个是Activity:
package com.example.demo_app.paracble;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.FrameLayout;public class ParacbleActivity extends Activity{FrameLayout mFrame ;Button mButton ;public static final String RECEIVER_PARCABLE = "android.paracble" ;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);mFrame = new FrameLayout(this);setContentView(mFrame);mButton = new Button(this);FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT);mButton.setLayoutParams(lp);mButton.setText("send");mFrame.addView(mButton);IntentFilter filter = new IntentFilter();filter.addAction(RECEIVER_PARCABLE);registerReceiver(mReceiver, filter);mButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction(RECEIVER_PARCABLE);Person p = new Person();p.name = "wenxiang" ;p.age = 40 ;p.garde = 33 ;Son son = new Son();son.name = "myson" ;p.son = son ;String[] msg = new String[]{"msg1","msg2"};p.msg = msg ;intent.putExtra("value", p);sendBroadcast(intent);}});}protected void onDestroy() {super.onDestroy();unregisterReceiver(mReceiver);};BroadcastReceiver mReceiver = new BroadcastReceiver(){public void onReceive(Context context, Intent intent) {String action = intent.getAction() ;if(action.equals(RECEIVER_PARCABLE)){Person p = (Person)intent.getParcelableExtra("value");Log.d("Tag", "receiver person : "+p+" name : "+p.name+" , age : "+p.age+" , grade : "+p.garde+" , son "+p.son+" , msg : "+p.msg);}};};}
这个带有数组对象的Parcelable对象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 ;@Overridepublic int describeContents() {Log.v("Tag", " describeContents ");return 0;}@Overridepublic 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>() {@Overridepublic Person[] newArray(int size) {Log.w("Tag", " person new Array : "+size);return new Person[size];}@Overridepublic 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 ;@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(name);}public static final Creator<Son> CREATOR = new Creator<Son>() {@Overridepublic Son createFromParcel(Parcel source) {Son s = new Son();s.name = source.readString();return s;}@Overridepublic Son[] newArray(int size) {return new Son[size];}};}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息