沪江小D在线词典 点击查词
有问题Q我

Android中使用Parcelable

今天 在两个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);
    }
}

 

 

结果打出来了

posted @ 2013-12-07 11:52  Python绿色通道  阅读(379)  评论(0编辑  收藏  举报