Android开发之使用Parcelable对自定义的类进行序列化
16lz
2021-01-26
如果自定义的类型需要通过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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent 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);}});}}
package com.example.parcelabledemo;import android.app.Activity;import android.os.Bundle;import android.widget.Toast;public class HandleActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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
更多相关文章
- Android(安卓)自定义动态注册Broadcast框架
- Android(安卓)实现Json数据解析,并进行应用!
- Android(安卓)Interfaces and Architecture 安卓接口和架构
- android 学习之listview
- Android(安卓)Studio——private Handler mHandler = new Handle
- ListViewAnimations 源码浅析
- Android(安卓)Json解析方法
- Android到处都在使用的回调分析
- Android的接口定义语言(aidl)