2013-01-01 4 views
1

Parcelable Object를 소하하고 다시 돌려 주려면 변수의 값은 모두 0.0입니다! 어떤 아이디어?Parcel의 변수는 Parcel 후에 값이 항상 0.0입니다.

data = new ParcelData((byte)1, (byte)1, (byte)1, 4.0f, 4.0f, 4.0f, 2, 2); 
final Parcel parcelData = Parcel.obtain(); 
data.writeToParcel(parcelData, 0); 

recievedData = ParcelData.CREATOR.createFromParcel(parcelData); 
Log.d ("test", "test: "+ recievedData.positionY); // always 0.0 ?!?!!? 

내가 해결책을 가지고 있습니다

답변

2

확인 마침내 당신을 감사 : 여기

내 Parcelable 클래스입니다 :

public class ParcelData implements Parcelable { 

public byte mapIsSelected; 
public byte carIsSelected; 
public byte gameIsPaused; 
public float positionX ; 
public float positionY ; 
public float angle; 
public int whichMap; 
public int whichCar; 



public ParcelData(byte mapIsSelected, byte carIsSelected, byte gameIsPaused, float positionX, float positionY, float angle, int whichMap, int whichCar){ 


    this.mapIsSelected = mapIsSelected; 
    this.carIsSelected = carIsSelected; 
    this.gameIsPaused = gameIsPaused; 
    this.positionX = positionX; 
    this.positionY = positionY; 
    this.angle = angle; 
    this.whichCar = whichCar; 
    this.whichMap = whichMap; 
} 


public int describeContents() { 

    return 0; 
} 



public void writeToParcel(Parcel dest, int flags) { 

    dest.writeByte(mapIsSelected); 
    dest.writeByte(carIsSelected); 
    dest.writeByte(gameIsPaused); 
    dest.writeFloat(positionX); 
    dest.writeFloat(positionY); 
    dest.writeFloat(angle); 
    dest.writeInt(whichCar); 
    dest.writeInt(whichMap); 

} 


private ParcelData(Parcel in) { 

    mapIsSelected = in.readByte(); 
    carIsSelected = in.readByte(); 
    gameIsPaused = in.readByte(); 
    positionX = in.readFloat(); 
    positionY = in.readFloat(); 
    angle = in.readFloat(); 
    whichMap = in.readInt(); 
    whichCar = in.readInt(); 
} 




public static final Parcelable.Creator<ParcelData> CREATOR = new Parcelable.Creator<ParcelData>() { 

     public ParcelData createFromParcel(Parcel in) { 
      return new ParcelData(in); 
     } 

     public ParcelData[] newArray(int size) { 
      // TODO Auto-generated method stub 
      return new ParcelData[size]; 
     } 
    }; 
} 

와 나는 여기보다 다시 Parcelable에 소포와를 만드는 방법입니다 :)

ParcelData.CREATOR.createFromParcel을 사용하기 전에 t를 설정해야합니다. 소포의 데이터 위치는 0으로 다시

data = new ParcelData((byte)1, (byte)1, (byte)1, 4.0f, 4.0f, 4.0f, 2, 2); 
final Parcel parcelData = Parcel.obtain(); 
data.writeToParcel(parcelData, 0); 

parcelData.setDataPosition(0) //<----- Solution 

recievedData = ParcelData.CREATOR.createFromParcel(parcelData);