private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator CREATOR
= new Parcelable.Creator() {
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();
}
}
此时Android Studio 给我们了一个插件可自动生成Parcelable 。
🔥 自动生成 Parcelable
==================
public class User {
String name;
int ag
e;
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;
}
}
想进行序列化,但是自己写太麻烦了,这里介绍个插件操作简单易上手。
💥 先下载
💥 使用
💥 效果
public class User implements Parcelable {
String name;
int 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;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
dest.writeInt(this.age);
}
public void readFromParcel(Parcel source) {
this.name = source.readString();
this.age = source.readInt();
}
public User() {
}
protected User(Parcel in) {
this.name = in.readString();
this.age = in.readInt();
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
@Override
public User createFromParcel(Parcel source) {
return new User(source);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
}
搞定。
写完了咱就运行走一波。
🔥 使用实例
=======
💥 Serializable
MainActivity.class
Bundle bundle = new Bundle();
UserSerializable userSerializable=new UserSerializable(“SCC”,15);
bundle.putSerializable(“user”,userSerializable);
Intent intent = new Intent(MainActivity.this, BunderActivity.class);
intent.putExtra(“user”,bundle);
startActivity(intent);
BunderActivity.class
Bundle bundle = getIntent().getBundleExtra(“user”);
UserSerializable userSerializable= (UserSerializable) bundle.getSerializable(“user”);
MLog.e(“Serializable:”+userSerializable.name+userSerializable.age);
日志:
2021-10-25 E/-SCC-: Serializable:SCC15
💥 Parcelable
MainActivity.class
Bundle bundle = new Bundle();
bundle.putParcelable(“user”,new UserParcelable(“SCC”,15));
Intent intent = new Intent(MainActivity.this, BunderActivity.class);
intent.putExtra(“user”,bundle);
startActivity(intent);
BunderActivity.class
Bundle bundle = getIntent().getBundleExtra(“user”);
UserParcelable userParcelable= (UserParcelable) bundle.getParcelable(“user”);
MLog.e(“Parcelable:”+userParcelable.getName()+userParcelable.getAge());
日志:
2021-10-25 E/-SCC-: Parcelable:SCC15
🔥 Parcelable 中使用泛型
===================
💥 UserParcelable
public class UserParcelable implements Parcelable {
private String name;
private int age;
private T data;
//…set/get部分省略
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public UserParcelable(String name, int age, T data) {
this.name = name;
this.age = age;
this.data = data;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
dest.writeInt(this.age);
//这里:先保存这个泛型的类名
dest.writeString(data.getClass().getName());
dest.writeParcelable(this.data, flags);
}
public void readFromParcel(Parcel source) {
this.name = source.readString();
this.age = source.readInt();
//这里
String dataName = source.readString();
try {
this.data = source.readParcelable(Class.forName(dataName).getClassLoader());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
protected UserParcelable(Parcel in) {
this.name = in.readString();
this.age = in.readInt();
//这里
String dataName = in.readString();
try {
this.data = in.readParcelable(Class.forName(dataName).getClassLoader());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static final Creator CREATOR = new Creator() {
@Override
public UserParcelable createFromParcel(Parcel source) {
return new UserParcelable(source);
}
@Override
public UserParcelable[] newArray(int size) {
return new UserParcelable[size];
}
};
}
💥 Tman
public class Tman implements Parcelable {
String color;
public Tman(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.color);
}
public void readFromParcel(Parcel source) {
this.color = source.readString();
}
protected Tman(Parcel in) {
this.color = in.readString();
}
public static final Creator CREATOR = new Creator() {
@Override
public Tman createFromParcel(Parcel source) {
return new Tman(source);
}
@Override
public Tman[] newArray(int size) {
return new Tman[size];
}
最后
小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
资料⬅专栏获取
}
protected Tman(Parcel in) {
this.color = in.readString();
}
public static final Creator CREATOR = new Creator() {
@Override
public Tman createFromParcel(Parcel source) {
return new Tman(source);
}
@Override
public Tman[] newArray(int size) {
return new Tman[size];
}
最后
小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-OspAEMJ2-1718823465121)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
资料⬅专栏获取