我试着让我的对象可打包。但是,我有自定义对象,这些对象具有我所做的其他自定义对象的ArrayList属性。
最好的方法是什么?
我试着让我的对象可打包。但是,我有自定义对象,这些对象具有我所做的其他自定义对象的ArrayList属性。
最好的方法是什么?
当前回答
将: bundle.putSerializable(“关键”,(序列化)对象);
得到: List<Object> obj = (List<Object>)((Serializable)bundle.getSerializable("key"));
其他回答
你可以在这里、这里(代码在这里)和这里找到一些例子。
您可以为此创建一个POJO类,但是您需要添加一些额外的代码以使其可封装。看一下实现。
public class Student implements Parcelable{
private String id;
private String name;
private String grade;
// Constructor
public Student(String id, String name, String grade){
this.id = id;
this.name = name;
this.grade = grade;
}
// Getter and setter methods
.........
.........
// Parcelling part
public Student(Parcel in){
String[] data = new String[3];
in.readStringArray(data);
// the order needs to be the same as in writeToParcel() method
this.id = data[0];
this.name = data[1];
this.grade = data[2];
}
@Оverride
public int describeContents(){
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {this.id,
this.name,
this.grade});
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
一旦你创建了这个类,你可以很容易地通过Intent传递这个类的对象,并在目标活动中恢复这个对象。
intent.putExtra("student", new Student("1","Mike","6"));
在这里,student是将数据从包中解包所需要的键。
Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");
这个例子只显示了String类型。但是,你可以打包任何你想要的数据。试试吧。
编辑:另一个例子,由Rukmal Dias提出。
将: bundle.putSerializable(“关键”,(序列化)对象);
得到: List<Object> obj = (List<Object>)((Serializable)bundle.getSerializable("key"));
我尝试使用Parcellable,时间很短,所以使用Gson如下。也许它能帮助到少数人…
PersonData personData;
BusinessData businessData;
以上两个都是模型对象。我想把它从loginactivity。class传递给mainactivity。class。Parcellable无法使用大型模型,需要时间进行修改。
startActivity(
new Intent(LogInActivity.this, MainActivity.class)
.putExtra("businessData", new Gson().toJson(businessData))
.putExtra("personData", new Gson().toJson(personData))
);
在MainActivity.class中检索这些对象
BusinessData businessData = new Gson().fromJson(getIntent().getStringExtra("businessData"), BusinessData.class);
PresonData personData = new Gson().fromJson(getIntent().getStringExtra("personData"), PersonData.class);
在Android Studio中创建没有插件的Parcelable类
在你的类中实现Parcelable,然后把光标放在“implements Parcelable”上,然后按Alt+Enter并选择添加Parcelable实现(见图片)。就是这样。
现在,您可以使用Parceler库将任何自定义类转换为parcelable。只需用@Parcel注释POJO类。 如。
@Parcel
public class Example {
String name;
int id;
public Example() {}
public Example(int id, String name) {
this.id = id;
this.name = name;
}
public String getName() { return name; }
public int getId() { return id; }
}
你可以创建一个Example类的对象,并通过包裹进行包装,并通过intent将其作为一个bundle发送。如
Bundle bundle = new Bundle();
bundle.putParcelable("example", Parcels.wrap(example));
现在要获得自定义类对象只需使用
Example example = Parcels.unwrap(getIntent().getParcelableExtra("example"));