zoukankan      html  css  js  c++  java
  • 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("
    ");
            }
            
            textView.setText(sb.toString());
            
            setContentView(textView);
        }
    }

    结果打出来了

  • 相关阅读:
    Medium | LeetCode 179. 最大数 | 排序
    Medium | LeetCode 448. 找到所有数组中消失的数字 | 原地Hash
    Medium | LeetCode 78. 子集 | 回溯
    Medium | LeetCode 39. 组合总和 | 回溯
    js上传头像进行图片压缩
    js 点击按钮复制文本
    eclipse下载
    gulp打包修改配置文件
    vuejs之过滤器(filters)的使用
    关于layui弹出层关闭之后,弹出的dom显示问题
  • 原文地址:https://www.cnblogs.com/liuzenglong/p/3443585.html
Copyright © 2011-2022 走看看