Ключ _id ожидался Parcelable, но значение было java.lang.Long. при передаче объекта Parceable между Activity

Я хочу передать объект своего пользовательского класса другому действию. Я узнал, что Parceable — это способ и НАМНОГО быстрее, чем Serializable. Но при этом я получаю исключение

Key _id expected Parceable but value was java.lang.Long. The default value <null> was returned.

Я не знаю, что я делаю неправильно с ним. Я следовал этим учебникам:

Код моего объекта, реализующего Parcelable, выглядит следующим образом:

public class CourseNote implements Parcelable {

private long id;
private String noteDescription;
private String noteTitle;
private String creationDate;
private String notePic;
private String noteAudio;
private String noteVideo;
private long courseID_FK;

// ---------------------------------------------------------------------------

public CourseNote() {
    super();
}

// ---------------------------------------------------------------------------

public CourseNote(long id, String noteContent, String noteTitle,
        String creationDate, String notePic, String noteAudio,
        String noteVideo, long courseID_FK) {
    super();
    this.id = id;
    this.noteDescription = noteContent;
    this.noteTitle = noteTitle;
    this.creationDate = creationDate;
    this.notePic = notePic;
    this.noteAudio = noteAudio;
    this.noteVideo = noteVideo;
    this.courseID_FK = courseID_FK;
}

// ---------------------------------------------------------------------------

// parcel constructor
public CourseNote(Parcel in) {
    String[] data = new String[8];

    in.readStringArray(data);
    this.id = Long.parseLong(data[0]);
    this.noteDescription = data[1];
    this.noteTitle = data[2];
    this.creationDate = data[3];
    this.notePic = data[4];
    this.noteAudio = data[5];
    this.noteVideo = data[6];
    this.courseID_FK = Long.parseLong(data[7]);

}

@Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub
    dest.writeStringArray(new String[] { String.valueOf(this.id),
            this.noteDescription, this.noteTitle, this.creationDate,
            this.notePic, this.noteAudio, this.noteVideo,
            String.valueOf(this.courseID_FK) });

}

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

    @Override
    public CourseNote[] newArray(int size) {
        // TODO Auto-generated method stub
        return new CourseNote[size];
    }

    @Override
    public CourseNote createFromParcel(Parcel source) {
        // TODO Auto-generated method stub
        return new CourseNote(source);
    }
};

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

// ---------------------------------------------------------------------------

    // I am ignoring setters/getters
}

Когда пользователь щелкает элемент списка, я отправляю объект Parcelable другому действию, я делаю это в onItemClickListner следующим образом (однако он работает нормально):

        getListView().setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view,
                int position, long id) {
            long selectedNoteId = id;

            mIntent = new Intent(getActivity(), AddEditNoteActivity.class);

            mCursor = (Cursor) mNoteListAdapter2.getItem(position);

            mTempCourseNote = new CourseNote(
                    id,
                    mCursor.getString(mCursor
                            .getColumnIndex(CourseNote.COL_CONTENT)),
                    mCursor.getString(mCursor
                            .getColumnIndex(CourseNote.COL_TITLE)),
                    String.valueOf(mCursor.getLong(mCursor
                            .getColumnIndex(CourseNote.COL_CREATION_DATE))),
                    "", "", "", mCursor.getLong(mCursor
                            .getColumnIndex(CourseNote.COL_COURSE_ID_FK)));

            mIntent.putExtra("method", "edit");
            mIntent.putExtra(CourseNote._ID, mTempCourseNote);
            mIntent.putExtra(Course._ID, currentCourseID);

            Log.i(StudyManagerDataSource.LOG_TAG, "Going to start activity");
            startActivity(mIntent);

        }
    });

Вот как я получаю объект ParcelAble:

CourseNote mTempCourseNote = (CourseNote) getIntent().getParcelableExtra(
                CourseNote._ID);

person Shajeel Afzal    schedule 18.06.2013    source источник
comment
проверьте, это может помочь androidhub.wordpress.com/2011/08/03/   -  person Raghunandan    schedule 18.06.2013


Ответы (1)


Проблема заключалась в типе данных ключа, который я использовал в

mIntent.putExtra(CourseNote._ID, mTempCourseNote);

его тип данных long, я изменил тип данных на string, и теперь проблема решена!

person Shajeel Afzal    schedule 18.06.2013