0

オブジェクトを Parcelable にしようとしています。区画からオブジェクトを作成するための次のコードと、区画に書き込むための関数があります。パーセルからオブジェクトを作成しようとすると、m_endTime の作成中にエラーが発生し、文字列をロングにキャストできないと表示されます。何が起こっているのかよくわかりません。

private RECTripFishery(Parcel in) {
    m_tripId = (Integer) in.readValue(null);
    m_fishery = (String) in.readValue(null);
    m_targetSpecies = (String) in.readValue(null);
    m_startTime = new Date((Long) in.readValue(null));
    if (in.readValue(null) == null){
        m_endTime = null;
    } else {
        m_endTime = new Date((Long) in.readValue(null));
    }
    m_startLatitude = (Double) in.readValue(null);
    m_startLongitude = (Double) in.readValue(null);
    m_endLatitude = (Double) in.readValue(null);
    m_endLongitude = (Double) in.readValue(null);
}

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeValue(Integer.valueOf(m_tripId));
    dest.writeValue(m_fishery);
    dest.writeValue(m_targetSpecies);
    dest.writeValue(Long.valueOf(m_startTime.getTime()));
    if (m_endTime == null) {
        dest.writeValue(null);
    } else {
        dest.writeValue(Long.valueOf(m_endTime.getTime()));
    }

    dest.writeValue(m_startLatitude);
    dest.writeValue(m_startLongitude);
    dest.writeValue(m_endLatitude);
    dest.writeValue(m_endLongitude);

    return;
}private RECTripFishery(Parcel in) {
    m_tripId = (Integer) in.readValue(null);
    m_fishery = (String) in.readValue(null);
    m_targetSpecies = (String) in.readValue(null);
    m_startTime = new Date((Long) in.readValue(null));
    if (in.readValue(null) == null){
        m_endTime = null;
    } else {
        m_endTime = new Date((Long) in.readValue(null));
    }
    m_startLatitude = (Double) in.readValue(null);
    m_startLongitude = (Double) in.readValue(null);
    m_endLatitude = (Double) in.readValue(null);
    m_endLongitude = (Double) in.readValue(null);
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeValue(Integer.valueOf(m_tripId));
    dest.writeValue(m_fishery);
    dest.writeValue(m_targetSpecies);
    dest.writeValue(Long.valueOf(m_startTime.getTime()));
    if (m_endTime == null) {
        dest.writeValue(null);
    } else {
        dest.writeValue(Long.valueOf(m_endTime.getTime()));
    }

    dest.writeValue(m_startLatitude);
    dest.writeValue(m_startLongitude);
    dest.writeValue(m_endLatitude);
    dest.writeValue(m_endLongitude);

    return;
}
4

1 に答える 1

0

この部分を変更します。

if (in.readValue(null) == null) {
        m_endTime = null;
} else {
        m_endTime = new Date((Long) in.readValue(null));
}

に:

Object val = in.readValue(null);

if (val == null) {
    m_endTime = null;
} else {
    m_endTime = new Date((Long) val);
}

編集:readValueあなたの問題は2 回呼び出しています。

于 2013-11-12T18:30:10.217 に答える