2012-10-26 90 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(),现在它工作正常。