Android中使用Parcelable
2013-12-07 11:52
239 查看
今天 在两个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:
结果打出来了
下面一段话是复制网友的。
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中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- android开发之Parcelable使用详解
- Android开发当中Parcelable接口的使用
- Android开发当中Parcelable接口的使用
- android中Parcelable和Serializable的使用
- Android使用Parcelable传递对象方法及注意事项
- Android使用Parcelable传递对象方法及注意事项
- 当在类中的 Parcelable 接口使用 ArrayList < customObject > android 系统: nullPointerException
- Android-Parcelable理解与使用(对象序列化)
- Android中Parcelable的插件使用
- Android中使用Parcelable实现对象的序列化
- Android开发当中Parcelable接口的使用
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- Android中Parcelable接口的使用
- android开发之Parcelable使用详解
- Android开发当中Parcelable接口的使用
- Android中的Parcelable接口和Serializable使用方法和差别
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- Android 使用Parcelable序列化对象
- Android开发当中Parcelable接口的使用