2011-09-19 85 views
3

我正在使用包裹對象將值從一個過程傳遞到另一個過程。我想創建一個包裹對象的克隆,但我無法使用clone()方法如果有人知道如何創建包裹副本,請提供解決方案。創建包裹對象的副本

回答

5

假設你的對象實現了Parcelable接口,你應該能夠做到以下幾點:

SomethingParcelable myObject = new SomethingParcelable(); 

Parcel p = Parcel.obtain(); 
myObject.writeToParcel(p, 0); 

//must be called after unmarshalling your data. 
p.setDataPosition(0); 

SomethingParcelable myClonedObject = SomethingParcelable.CREATOR.createFromParcel(p); 
15

建議的解決方案是不完整的,並且將無法正常工作。

這裏有一個工作的解決方案:

(我有一個名爲類型MessageDescriptor的消息,我想克隆一個對象)

Parcel parcel = Parcel.obtain(); 
message.writeToParcel(parcel, 0); 
parcel.setDataPosition(0); 
MessageDescriptor messageToBeSent = MessageDescriptor.CREATOR.createFromParcel(parcel); 
parcel.recycle(); 
0

也爲拷貝構造函數是有用的。

/** 
* Copy request passed in. 
* 
* @param request Request To clone, null is accepted, just creates a blank object 
*/ 
public RealTimeJourneyPlanRequest(@Nullable RealTimeJourneyPlanRequest request) { 
    if(request == null) return; 
    // Only copy if the request past in is not null 
    // Use the Parcel as its does deep cloning for us. 
    final Parcel parcel = Parcel.obtain(); 
    request.writeToParcel(parcel, 0); 
    parcel.setDataPosition(0); 
    // Copy into this object 
    readFromParcel(parcel); 
    // Clean parcel back into object pool 
    parcel.recycle(); 
}