1

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

这是我的代码。

可包裹物体:

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
...

我如何在活动1中通过它:

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

传递给活动2:

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

}

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

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

4

2 回答 2

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
}
于 2013-06-02T21:39:44.673 回答
1

从文档:

final int    readInt()

在当前 dataPosition() 从包裹中读取一个整数值。

当前的 dataPosition() 表示两个 in.readInt() 不同。

(这里:http: //developer.android.com/reference/android/os/Parcel.html

于 2013-06-02T21:26:58.583 回答