2012-10-26 61 views
1

我有一個實現Parcelable的類。這個類有1個int和2個String。 僅讀取int數據時返回。第一個字符串返回爲「」,第二個返回爲空。從parcelable對象讀取字符串返回null

寫作包裹 -

After writing int - data position 376 parcel size 376. 
After writing String1 - data position 392 parcel size 392. 
After writing String2 - data position 412 parcel size 412. 

閱讀包裹 -

After reading int - data position 112 parcel size 152. 
After reading String1 - data position 120 parcel size 152. 
After reading String2 - data position 124 parcel size 152. 

如果該數據的大小是一邊讀小區數據一樣嗎?

類實現Parcelable -

public class Message implements Parcelable { 
private long id; 
private String from; 
private String message; 

private String TAG = Message.class.getSimpleName(); 


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

    @Override 
    public Message createFromParcel(Parcel source) { 
     return new Message(source); 
    } 

    @Override 
    public Message[] newArray(int size) { 
     Log.v("Message", "New array size " + size); 
     return new Message[size]; 
    } 
}; 

public Message(){ 

} 

private Message(Parcel source){ 
    id = source.readInt(); 
    Log.v(TAG, "Reading parcel object data position " + source.dataPosition() + " parcel size " + source.dataSize()); 
    from = source.readString(); 
    Log.v(TAG, "Reading parcel object data position " + source.dataPosition() + " parcel size " + source.dataSize());  
    message = source.readString(); 
    Log.v(TAG, "Reading parcel object data position " + source.dataPosition() + " parcel size " + source.dataSize()); 
} 

/** 
* @return the id 
*/ 
public long getId() { 
    return id; 
} 
/** 
* @param id the id to set 
*/ 
public void setId(long id) { 
    this.id = id; 
} 
/** 
* @return the from 
*/ 
public String getFrom() { 
    return from; 
} 
/** 
* @param from the from to set 
*/ 
public void setFrom(String from) { 
    this.from = from; 
} 
/** 
* @return the message 
*/ 
public String getMessage() { 
    return message; 
} 
/** 
* @param message the message to set 
*/ 
public void setMessage(String message) { 
    this.message = message; 
} 

/* (non-Javadoc) 
* @see java.lang.Object#toString() 
*/ 
@Override 
public String toString() { 
    return "Message [id=" + id + ", from=" + from + ", message=" + message 
      + "]"; 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    Log.v(TAG, "Writing parcel object " + flags + " -- " + id + " -- " + from + " -- " + message); 
    dest.writeLong(id); 
    Log.v(TAG, "Writing parcel object data position " + dest.dataPosition() + " parcel size " + dest.dataSize()); 
    /*dest.writeString(from); 
    dest.writeString(message);*/ 
    dest.writeString("from"); 
    Log.v(TAG, "Writing parcel object data position " + dest.dataPosition() + " parcel size " + dest.dataSize()); 
    dest.writeString("message"); 
    Log.v(TAG, "Writing parcel object data position " + dest.dataPosition() + " parcel size " + dest.dataSize()); 
} 

}

+0

Your Parcelable和讀/寫的一些代碼可能是有用的 – sandrstar

+0

@sandrstar - 編輯包含代碼的問題。 – Salil

回答

3

的問題,我是用writeLong(),但同時讀數做的readInt()。 用readLong()替換了readInt(),現在它工作正常。