android Parcelable 带有数组的对象如何序列化 String[] Long[] int[] Object[]
来源:互联网 发布:淘宝卖家温馨寄语 编辑:程序博客网 时间:2024/06/06 20:20
转载自:http://blog.csdn.net/wenxiang423/article/details/16332217
这个是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" ;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.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() {
- @Override
- public 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 ;
- @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];
- }
- };
- }
0 0
- android Parcelable 带有数组的对象如何序列化 String[] Long[] int[] Object[]
- android Parcelable 带有数组的对象如何序列化 String[] Long[] int[] Object[]
- android Parcelable序列化数组String[]
- Android 序列化对象Parcelable 的使用
- Android Parcelable 序列化 的时候:已经序列化的对象, 数组,boolean,Bitmap;
- android 序列化对象 Parcelable
- Android 对象序列化 Parcelable
- Android实现Parcelable对象序列化的实例
- 关于android传递对象Parcelable序列化的问题
- android开发中对象的序列化-实现Parcelable接口.
- Android中使用Parcelable实现对象的序列化
- Android 使用Parcelable序列化对象
- Android 使用Parcelable序列化对象
- Android 使用Parcelable序列化对象
- android Parcelable接口序列化对象
- Android 中的Parcelable序列化对象
- Android 使用Parcelable序列化对象
- Android 实现Parcelable接口序列化对象
- 黑马程序员——集合(上)
- IOS开发类似于微博个人中心的头像可以拖动lei
- textfield的属性
- VB使用ADODB操作数据库
- IOS开发笔记-01按钮操作-01入学须知
- android Parcelable 带有数组的对象如何序列化 String[] Long[] int[] Object[]
- [NOIP2010]关押罪犯(二分+二分图染色)
- android模拟器重启防止恢复重置,永久删除系统应用apk
- nyoj 6 喷水装置(一)
- CLRS 5.2指示器随机变量
- eclipse和pydev的配置
- Android 动态解析布局,实现制作多套主题
- 华为OJ平台试题 —— 数组:输入n个整数,输出其中最小的k个
- Legal or Not