2012-10-26 5 views
1

나는 Parcelable을 구현하는 클래스가 있습니다. 클래스는 1 int와 2 String을가집니다. 읽기 전용 인 경우 int 데이터가 반환됩니다. 첫 번째 문자열은 ""로 반환되고 두 번째 문자열은 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

일부 코드는 귀하의 소구문 및 읽기/쓰기가 유용 할 수 있습니다. – sandrstar

+0

@sandrstar - 질문을 수정하여 코드를 포함 시켰습니다. – Salil

답변

3

문제는, 내가 내의 writeLong을 사용 하였다()하지만 독서는 readInt을하는 동안(). readInt()를 readLong()으로 바꿔 이제는 잘 작동합니다.

관련 문제