如何在Parcelable对象中读/写int?

时间:2013-06-02 21:16:01

标签: java android parcelable

我的int变量在我的Parcelable对象中没有正确读/写。 我将我的对象从一个活动传递到另一个活动但是一旦我传递它并读取它就不一致。

继承我的代码。

可分割的对象:

class someObject implements Parcelable
int something;
int something2;

//normal constructor
... 

public someObject(Parcel in){
  this.something = in.readInt();
  this.something2 = in.readInt();
}

public void writeToParcel(Parcel dest, int flags){
   dest.writeInt(something);
   dest.writeInt(something2);
}
//creator and other parcel stuff
...

//mutators for int variables
...

我如何在activity1中传递它:

//instantiate someObject 
...
Intent intent = new Intent(activity1.this, activity2.class);
intent.putExtras("stuff", someObject);

传递给activity2:

onCreate(Bundle blah){
Bundle b = getIntent.getExtras();
someObject some = b.getParcelable("stuff");

}

我在构造函数中输出了一些东西和某些东西,以及我传递它的活动。它们是不同的价值观,我做错了什么?

我的parcelable对象类中有其他String成员变量,它们似乎有效。只有2个整数没有正常工作。

2 个答案:

答案 0 :(得分:1)

来自文档:

final int    readInt()
  

从当前dataPosition()的宗地读取一个整数值。

当前的dataPosition()意味着两个in.readInt()是不同的。

(此处:http://developer.android.com/reference/android/os/Parcel.html

答案 1 :(得分:1)

我发现了问题,我的写入和读取不在同一位置,因此dataPosition()关闭,从而读取不同的对象。

例)

 read(parcel in){
   in.readString(); //1
   in.readString(); //2
   in.readInt();    //3
}

 write(Parcel dest, int flag){
   dest.writeString(); //1
   dest.writeInt();    //3
   dest.writeString(); //2
}