[해결] Parcelable encountered IOException writing serializable object
안드로이드에서는 객체를 Intent에서 넘기기 위해서는 implements Serializable을 해당 객체에게 추가해주면 된다.
CharacterItem 이라는 객체를 리스트뷰에서 눌렀을 때 객체 속 String이나 int같은 값을 따로따로 전달하지 않는 방법.
Character implements Serializable { private String name; private int level; private int job; // job is job code (1=warrior, 2=archor . . .) public String getName() { return name; } public void setName(String name) { this.name = name; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public int getJob() { return job; } public void setJob(int job) { this.job = job; } }
이런 식으로 Serializable을 적용해준 다음에
Intent intent = new Intent(getApplicationContext(), MainActivity.class); Character character = (Character) characterAdapter.getItem(i); intent.putExtra("character", character);
이런 방식으로 전달해주면 된다. (참고로 변수 i는 리스트뷰의 n번째 위치를 의미하고 Adapter는 리스트뷰에 붙인 어댑터를 의미한다)
만약 이런 식으로 Serializable을 적용했는데도 오류가 발생한다면, 객체 안에 또 다른 객체가 있을 경우에는 해당 객체에게도 Serializable을 적용해야 한다.
Character implements Serializable { private String name; private int level; private int job; // job is job code (1=warrior, 2=archor . . .) private List<BagItem> bag; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public int getJob() { return job; } public void setJob(int job) { this.job = job; } }
이런 식으로 BagItem이라는 클래스를 하나 만들었다고 한다면, Character를 Intent로 넘기기 위해서는 BagItem도 implements Serializable 해줘야 한다.