今天 在两个Activity之间传集合类型数据,看了一下,要用Parcelable 所以就看一下东西:

下面一段话是复制网友的。

Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在IPC中。实现Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。下面就介绍一下实现Parcelable接口的方法
通过实现Parcelable接口序列化对象的步骤:
1、声明实现接口Parcelable
2、实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象
3、实例化静态内部对象CREATOR实现接口Parcelable.Creator:

package com.hct.demo;import android.os.Parcel;import android.os.Parcelable;import android.util.Log;/** *  * @time 2013-11-26 下午4:12:46 * @todo  person实体类,实现Parcelable接口类 */public class Person implements Parcelable {    private static final String TAG = ParcelableTest.TAG;        private int age;    private String name;    public Person(){}        public Person(String name, int age) {        super();        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    /**     *      3、实例化静态内部对象CREATOR实现接口Parcelable.Creator:Java代码  收藏代码              public static final Parcelable.Creator<T> CREATOR 其中public static final一个都不能少                              ,内部对象CREATOR的名称也不能改变,必须全部大写。         4、完成CREATOR的代码,实现方法createFromParcel,将Parcel对象反序列化为你的对象         简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象        。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象        ,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。      */    public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {        @Override        public Person createFromParcel(Parcel source) {            Log.d(TAG, "createFromParcel");            Person mPerson = new Person();            mPerson.name = source.readString();            mPerson.age = source.readInt();            return mPerson;        }        @Override        public Person[] newArray(int size) {            return new Person[size];        }    };    @Override    public int describeContents() {        Log.d(TAG, "describeContents");        return 0;    }    /**     * 实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象      */    @Override    public void writeToParcel(Parcel dest, int flags) {        Log.d(TAG, "writeToParcel");        dest.writeString(name);        dest.writeInt(age);    }}

package com.hct.demo;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class ParcelableTest extends Activity implements OnClickListener {    public static final String KEY = "key";    private Button button;    public static final String TAG = "Parcelable";    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        init();        Log.d(TAG, "ParcelableTest");    }    private void init() {        button = (Button) findViewById(R.id.button);        button.setOnClickListener(this);    }    private void fun() {        Log.d(TAG, "fun");        Person mPerson = new Person();        mPerson.setName("tom");        mPerson.setAge(25);        Intent mIntent = new Intent(this,ParcelableTest2.class);        Bundle mBundle = new Bundle();        mBundle.putParcelable(KEY, mPerson);        mIntent.putExtras(mBundle);        startActivity(mIntent);    }        private void funList(){        ArrayList<Person> list = new ArrayList<Person>();        for(int i = 0;i<5;i++){        Person mPerson = new Person("abc"+i,i*5);        list.add(mPerson);        }        Intent mIntent = new Intent(this,ParcelableTest2.class);        mIntent.putParcelableArrayListExtra(KEY, list);        startActivity(mIntent);    }    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.button:            funList();            break;        default:            break;        }    }}

package com.hct.demo;import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.widget.TextView;public class ParcelableTest2 extends Activity {    private static final String TAG = ParcelableTest.TAG;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        Log.d(TAG, "ParcelableTest2");        TextView textView = new TextView(this);//        Person mPerson = (Person) getIntent().getParcelableExtra(ParcelableTest.KEY);                ArrayList<Person> arrays = getIntent().getParcelableArrayListExtra(ParcelableTest.KEY);        StringBuilder sb = new StringBuilder();        for(int i=0;i<arrays.size();i++){            Person mPerson = arrays.get(i);            sb.append("name = " + mPerson.getName() + "  age = "    + mPerson.getAge()).append("\n");        }                textView.setText(sb.toString());                setContentView(textView);    }}

Android中使用Parcelable_第1张图片

结果打出来了

更多相关文章

  1. 消除“Unfortunately, System UI has stopped”的方法
  2. 【Android】Aidl使用详解(支持多个回调和传递自定义对象)
  3. Android 通过 Intent 传递类对象
  4. android 调用系统相机或者系统相册功能时,onActivityResult方法不
  5. andorid中Html.fromHtml方法

随机推荐

  1. SqlServer下通过XML拆分字符串的方法
  2. Sqlserver 常用日期时间函数
  3. SQLServer中SELECT语句的执行顺序
  4. 在SQLServer上查看SQL语句的执行时间的方
  5. sqlserver 存储过程分页代码第1/2页
  6. 当恢复sqlserver bak文件时,原始的用户无
  7. 数据库中经常用到的操作和管理数据库的语
  8. 删除Table表中的重复行的方法
  9. distinct 多列问题结合group by的解决方
  10. SQL中函数 replace 的参数1的数据类型nte