在对象中实例化的访问对象作为parcelable with intent传递

时间:2014-05-05 12:19:36

标签: android android-intent parcelable

我对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

1 个答案:

答案 0 :(得分:0)

我认为您可以通过实施CREATOR字段来控制如何读取,编写宗地以及重新创建对象:

“实例可以写入Parcel并从Parcel中恢复的类的接口。实现Parcelable接口的类也必须有一个名为CREATOR的静态字段,它是一个实现Parcelable.Creator接口的对象。”

我认为方法是让公司也可以Parcelable,或者在Person的writeToParcel()中包含公司的数据,并在Parcelable.Creator.createFromParcel()中重新创建两个对象。

看到这个链接,它有一个基本的例子: http://developer.android.com/reference/android/os/Parcelable.html