4

所以我试图将我通过意图创建的类的实例传递给新的活动。

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();
}

而且我不断收到一个我无法弄清楚的不可序列化异常。这两个类都实现了可序列化并具有序列 ID。成员变量只是字符串、整数和另一个类的数组,该类也可序列化,仅包含字符串。据我所知,所有这些东西都应该是可序列化的,还有什么可能导致这个错误?提前致谢。

4

3 回答 3

9

这些课程是您活动的内部课程还是其他课程?如果是这样,它们有对其外部类的引用(可能是可序列化的,也可能不是可序列化的),您可以通过创建这些类来解决这个问题static

例子:

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

public static class MarkerHolder implements Serializable
{
    //your implementation
}
于 2012-07-19T21:49:01.343 回答
0

尝试将 ArrayList 更改为 MarkerHolder 的本机数组:

MarkerHolder[] markerHolders;

更新:我的错。我一直使用本机数组进行序列化,所以不知道 ArrayList 确实是可序列化的。

您的代码看起来正确。logcat 中打印的确切错误消息是什么(即哪个类引发了序列化异常)?

另一种解决方案(更多工作)是让您的对象实现 Parcable 接口。

于 2012-07-19T21:44:12.770 回答
0

尝试使用getApplicationContext()上下文代替此。

于 2012-07-19T22:02:08.300 回答