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

そして、私が理解できない Not Serializable Exception が発生し続けます。どちらのクラスもシリアライズ可能を実装し、シリアル ID を持っています。メンバー変数は、単なる文字列、int、および文字列のみを含むシリアル化可能な別のクラスの配列です。私が知る限り、これらはすべてシリアライズ可能である必要がありますが、他に何がこのエラーを引き起こす可能性がありますか? 前もって感謝します。

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()またはcontextを使用してみてください。

于 2012-07-19T22:02:08.300 に答える