Android开发之使用Parcelable对自定义的类进行序列化

如果自定义的类型需要通过Intent或IPC进行传递,就需要对数据进行序列化处理。

下面是Android官网上的一个例子

public class MyParcelable implements Parcelable {
     private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };
     
     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }
从以下例子可以看到一个基本类要实现序列化需要实现Parcelable接口,通过Parcel进行存储。实现Parcelable接口的类必须有一个名为:CREATOR 的静态字段,这是一个实现Parcelable.Creator接口的对象,这样一个自定义的类型就可以跟基本数据一样使用Intent进行传递。

使用Intent传递MyParcelable

工程目录


MainActivity.java

package com.example.parcelabledemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Button btn = (Button) findViewById(R.id.btn);
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(MainActivity.this, HandleActivity.class);
				MyParcelable myParcelable = new MyParcelable(10);
				Bundle bundle = new Bundle();
				System.out.println("main " + myParcelable.get_data());
				bundle.putParcelable("value", myParcelable);
				intent.putExtras(bundle);
				startActivity(intent);
			}
		});
	}
}


HandleActivity.java
package com.example.parcelabledemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class HandleActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.handle);
		Bundle bundle = getIntent().getExtras();
		MyParcelable myParcelable = bundle.getParcelable("value");
		System.out.println(myParcelable.toString());
		Toast.makeText(this, "value = " + myParcelable.get_data(),
				Toast.LENGTH_LONG).show();
	}
}

一个类的序列化就完成了



参考资料:

http://developer.android.com/reference/android/os/Parcelable.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。