2013-06-02 63 views
0

我的int變量在我的Parcelable對象中沒有正確讀寫。 我正在將我的對象從一個活動傳遞給另一個活動,但是一旦我通過並閱讀它,int變量就不一樣了。如何在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 
... 

如何我通過它在活動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"); 

} 

我輸出的東西,something2我也通過它。他們是不同的價值觀,我做錯了什麼?

我在我的parcelable對象類中有其他字符串成員變量,他們似乎工作。只有2個輸入不能正常工作。

+0

你是說'當你創建一個新的'someObject' something'不同的是,當你收到你的'活性2#的onCreate()'方法的對象?不是說'something'與'something2'不同,對吧? – Nate

+0

的確,我將一些東西和東西2傳遞給activity1中的原始構造函數,然後嘗試在activity2中檢索它。但是,活動1中的某些東西!=活動2中的某些東西。相同的東西2 – Instinct

+0

你顯示的代碼看起來很好。也許別的地方有什麼東西搞砸了?當你把東西命名爲'something'和'something2'時,很容易出現剪切和粘貼錯誤。也許一個*胖手指*錯誤? – Nate

回答

1

從文檔:

final int readInt() 

在當前dataPosition閱讀來自包裹的整數值()。

當前的dataPosition()表示兩個in.readInt()是不同的。

(這裏:http://developer.android.com/reference/android/os/Parcel.html

+0

然後我會如何傳遞int? – Instinct

+0

我不知道你想做什麼,但如果你想要相同的int,那麼:this.something = in.readInt(); this.something2 = this.something;我建議編輯帖子並添加更多數據... – Paolof76

+0

您的dataposition()輸入幫助。謝謝 – Instinct

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 
} 
+0

這就是爲什麼你不應該用代碼來發布問題,這些代碼實際上並不是你正在使用的代碼,並且有問題。 – Nate