我对Parcelables
很新,并且正在苦苦挣扎。我使用Intent将类Person
的对象传递给另一个活动Parcelable
。
这样可以正常工作,但是这个对象已经从Employer
类中实例化了一个对象,当试图从第二个对象访问方法时,它会抛出一个NullPointerException
。我想这是包含在包中的Employer类对象。
任何有关良好做法的想法都可以使这项工作成功吗?我的实际代码比这复杂得多,所以我希望我不必重写enitre应用程序:-)任何想法都受到高度赞赏。
以下是我无法工作的代码的简化示例:
在MainActivity.java中:
Person client = new Person();
Intent i = new Intent();
Bundle b = new Bundle();
b.putParcelable("person",(Person) client);
i.putExtras(b);
i.setClass(this, SecondActivity.class);
startActivity(i);
在Person.java中
class Person implements Parcelable{
Company employer;
String lastName;
Person(){
lastName = "Smith";
employer = new Company("Burger King");
}
public String getLastName(){
return lastName;
}
public String getEmployer(){
return employer.getName();
}
}
在Company.class中
class Company {
String name;
Company(String companyName){
name = companyName;
}
public String getName(){
return name;
}
}
在SecondActivity.java中
Bundle b = this.getIntent().getExtras();
if(b!=null){
Person client = b.getParcelable("person");
String lastName = client.getLastName(); //works fine
String employer = client.getEmployer(); //thows NullPointerException
答案 0 :(得分:0)
我认为您可以通过实施CREATOR字段来控制如何读取,编写宗地以及重新创建对象:
“实例可以写入Parcel并从Parcel中恢复的类的接口。实现Parcelable接口的类也必须有一个名为CREATOR的静态字段,它是一个实现Parcelable.Creator接口的对象。”
我认为方法是让公司也可以Parcelable,或者在Person的writeToParcel()中包含公司的数据,并在Parcelable.Creator.createFromParcel()中重新创建两个对象。
看到这个链接,它有一个基本的例子: http://developer.android.com/reference/android/os/Parcelable.html