1

Parcelable を実装するクラスがあります。このクラスには、1 つの int と 2 つの String があります。int データのみを読み取る場合は返されます。最初の文字列は " " として返され、2 番目の文字列は 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());
}   

}

4

1 に答える 1

3

問題は、私は writeLong() を使用していましたが、読み取り中に readInt() を実行していたことです。readInt() を readLong() に置き換えたところ、正常に動作するようになりました。

于 2012-10-26T05:46:00.397 に答える