花费了一点时间搞定,也学习了一些东西。再次记录以下。
1. 使用 Serializable 方法
将类的实例序列化然后再做存储或者传输在JAVA中较为常见,在Android也可用。
具体看代码吧,比较简单。
public class MyClass implements Serializable{ private static final long serialVersionUID = 1L; public String userName; public String psw; public int age;}一个自定义类,实现Serializable接口。
findViewById(R.id.send_arraylist_button).setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub ArrayList一个Activity中传递。arrayList = new ArrayList (); for (int i = 0; i < 10; i++) { MyClass myClass = new MyClass(); myClass.userName = "a" + i; myClass.psw = "b" + i; myClass.age = 10 + i; arrayList.add(myClass); } Intent intent = new Intent(); intent.putExtra("key", arrayList); intent.setClass(MainActivity.this, ResultActivity.class); startActivity(intent); } });
ArrayList另一个Activity中接收 2. 使用Parcelable 方法arrayList = (ArrayList ) getIntent().getSerializableExtra("key"); String result = "" ; for (MyClass myClass : arrayList) { result += myClass.userName + "--" + myClass.psw + "--" + myClass.age + "\n"; } ((TextView)findViewById(R.id.show_result_textview)).setText(result);
Android内存受限,迫使其封装了Parcel容器来替代Serializable方法。
代码中做了一些注释,这里就不再解释了。
/*** Parcel类:http://developer.android.com/reference/android/os/Parcel.html * 封装数据的容器,封装后的数据可以通过Intent或IPC传递 * * Parcelable接口:http://developer.android.com/reference/android/os/Parcelable.html * 自定义类继承该接口后,其实例化后能够被写入Parcel或从Parcel中恢复。 * * 如果某个类实现了这个接口,那么它的对象实例可以写入到 Parcel 中,并且能够从中恢复,* 并且这个类必须要有一个 static 的 field ,并且名称要为 CREATOR ,这个 field 是某个实现了 Parcelable.Creator 接口的类的对象实例。*/public class MyClass2 implements Parcelable{ public String userName; public String psw; public int age; //静态的Parcelable.Creator接口 public static final Parcelable.Creator一个自定义类,注释中又说明,看代码。CREATOR = new Creator () { //创建出类的实例,并从Parcel中获取数据进行实例化 public MyClass2 createFromParcel(Parcel source) { MyClass2 myClass2 = new MyClass2(); myClass2.userName = source.readString(); myClass2.psw = source.readString(); myClass2.age = source.readInt(); return myClass2; } public MyClass2[] newArray(int size) { // TODO Auto-generated method stub return new MyClass2[size]; } }; // @Override public int describeContents() { // TODO Auto-generated method stub return 0; } //将数据写入外部提供的Parcel中 @Override public void writeToParcel(Parcel dest, int flags) { // TODO Auto-generated method stub dest.writeString(userName); dest.writeString(psw); dest.writeInt(age); }}
//use Parcelable findViewById(R.id.send_arraylist_button).setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub ArrayList发送arrayList = new ArrayList (); for (int i = 0; i < 10; i++) { MyClass2 myClass2 = new MyClass2(); myClass2.userName = "a" + i; myClass2.psw = "b" + i; myClass2.age = 10 + i; arrayList.add(myClass2); } Intent intent = new Intent(); intent.putParcelableArrayListExtra("key", arrayList); intent.setClass(MainActivity.this, ResultActivity.class); startActivity(intent); } });
//use Parcelable ArrayList接收。arrayList = (ArrayList ) getIntent().getSerializableExtra("key"); String result = "" ; for (MyClass2 myClass2 : arrayList) { result += myClass2.userName + "--" + myClass2.psw + "--" + myClass2.age + "\n"; } ((TextView)findViewById(R.id.show_result_textview)).setText(result);