1

我无法通过Intent. 我不断收到空指针错误。这里是:

在我的 ListActivity 中:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    Intent intent = new Intent(MyListActivity.this, DetailsActivity.class);
    intent.putExtra("this_item", my_array.get(position));
    startActivity(intent);
}

在 DetailsActivity 类的 onCreate() 中:

thisItem = (MyObject) getIntent().getExtras().getParcelable("this_item");
System.err.println(thisItem.getDescription()); //<--Null pointer error!

该类MyObject确实实现了Parcelable. 为什么我不能通过这个对象?我很困惑。谢谢你的帮助。

编辑:这是那个类:

public class MyObject implements Comparable<MyObject>, Parcelable {

    private Date date;
    private MyType my_type;
    private String description;
    private int flags;

    public MyObject(Date date, MyType type, String desc) {
        this.date = date;
        this.my_type = type;
        this.description = desc;
    }

    public Date getDate() {return date;}
    public MyType getMyType() {return my_type;}
    public String getDescription() {return description;}

    public int compareTo(MyObject another) {
        if (getDate() == null || another.getDate() == null) {return 0;}
        return getDate().compareTo(another.getDate());
    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(flags);
    }   

    public static final Parcelable.Creator<MyObject> CREATOR = new Parcelable.Creator<MyObject>() {
        public MyObject createFromParcel(Parcel in) {
            return new MyObject(in);
        }

        public MyObject[] newArray(int size) {
            return new MyObject[size];
        }
    };

    private MyObject (Parcel in) {
        flags = in.readInt();
    }
}
4

1 回答 1

2

如果您想通过意图将数据从一个活动传递到另一个活动,则该对象必须在 android 中是可打包或可序列化的。对于可打包的,您必须实现可序列化的接口。对于可打包的,您必须实现可打包的接口。

像这样写parcelable类.. parcel示例

于 2013-08-20T05:51:58.417 回答