Not Serializable Exception на пользовательском классе – Android

Поэтому я пытаюсь передать экземпляр класса, который я создаю, за счет намерения нового действия.

public class Room implements Serializable{ /** * */ private static final long serialVersionUID = 6857044522819206055L; int roomID; String roomName; ArrayList<MarkerHolder> markerHolders = new ArrayList<MarkerHolder>(); public int getRoomID() { return roomID; } public void setRoomID(int roomID) { this.roomID = roomID; } public String getRoomName() { return roomName; } public void setRoomName(String roomName) { this.roomName = roomName; } public ArrayList<MarkerHolder> getMarkerHolders() { return markerHolders; } public void setMarkerHolders(ArrayList<MarkerHolder> markerHolders) { this.markerHolders = markerHolders; } } public class MarkerHolder implements Serializable{ /** * */ private static final long serialVersionUID = -7334724625702415322L; String marker; String markerTag; public String getMarker() { return marker; } public void setMarker(String marker) { this.marker = marker; } public String getMarkerTag() { return markerTag; } public void setMarkerTag(String markerTag) { this.markerTag = markerTag; } } 

И я пытаюсь передать этот класс

 Intent svc = new Intent(this, RoomUploader.class); svc.putExtra("room", room); try{ startService(svc); }catch (Exception e){ e.printStackTrace(); } 

И я продолжаю получать несериализуемое исключение, которое я не могу понять. Оба класса реализуют сериализуемые и имеют последовательные идентификаторы. Переменные-члены – это просто строки, ints и массив другого класса, который также сериализуется, содержащий только строки. Насколько я знаю, все эти вещи должны быть сериализуемыми, что еще может вызвать эту ошибку? Заранее спасибо.

Являются ли эти классы внутренними классами вашей деятельности или другого класса? Если это так, они ссылаются на свой внешний класс (который может быть или не может быть сериализуемым), и вы можете решить это, сделав эти классы static .

Пример:

 public static class Room implements Serializable { //your implementation } public static class MarkerHolder implements Serializable { //your implementation } 

Попробуйте изменить ArrayList на собственный массив MarkerHolder:

 MarkerHolder[] markerHolders; 

Обновление: плохо. Я всегда использовал собственный массив для сериализации, поэтому не знаю, что ArrayList действительно сериализуется.

Ваш код выглядит правильно. Каково было точное сообщение об ошибке, напечатанное в logcat (т.е. какой класс выбрал исключение для сериализации)?

Другое решение (больше работы) заключается в том, чтобы ваши объекты реализовали интерфейс Parcable.

Попробуйте использовать getApplicationContext () или контекст, установленный для этого.