Android中使用Parcelable

来源:互联网 发布:linux查看所有用户 编辑:程序博客网 时间:2024/06/15 21:22
今天 在两个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);    }}

 

 

结果打出来了

0 0
原创粉丝点击