所以我试图通过意图将一个我创建的类的实例传递给一个新活动。
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();
}
我不断得到一个我无法弄清楚的Not Serializable异常。这两个类都实现了可序列化并具有串行ID。成员变量只是字符串,整数和另一个类的数组,该类也是可序列化的,只包含字符串。据我所知,所有这些都应该是可序列化的,还有什么可能导致这个错误?提前谢谢。
答案 0 :(得分:9)
这些类是您的活动的内部类还是其他类?如果是这样,他们会引用他们的外部类(可能是也可能不是可序列化的),你可以通过创建这些类static
来解决这个问题。
示例:
public static class Room implements Serializable
{
//your implementation
}
public static class MarkerHolder implements Serializable
{
//your implementation
}
答案 1 :(得分:0)
尝试将ArrayList更改为MarkerHolder的本机数组:
MarkerHolder[] markerHolders;
更新:我的不好。我总是使用本机数组进行序列化,所以不知道ArrayList确实是可序列化的。
您的代码看起来正确。在logcat中打印的确切错误消息是什么(即哪个类引发了序列化异常)?
另一个解决方案(更多工作)是让你的对象实现Parcable接口。
答案 2 :(得分:0)
尝试使用 getApplicationContext()或上下文而不是此。