0

シリアル化できないように見えるカスタムクラス(以下のコンストラクター)があります。

public ObjectNode(String name, int crackLevel,ArrayList<ObjectNode> filesOnComputer)

オブジェクトノードのArrayListからこのクラスのオブジェクトをシリアル化しようとするたびに、クラスキャスト例外が発生します。ArrayListをObjectNodeにキャストできません

コード-グローバル変数:

    ArrayList<ObjectNode>a=new ArrayList<ObjectNode>();
File file = new File("/mnt/sdcard/","cheesepuff.txt");

関連コード:

        public void serializeFile()
{       
    a.add(new ObjectNode("Level 1 Waterwall","ww1", 1, 5));
    try { 
        Log.i("AAA","before serialize: "+a.toString());
        FileOutputStream fos = new FileOutputStream(file); 
        ObjectOutputStream oos = new ObjectOutputStream(fos); 
        oos.writeObject(a); 
        oos.flush(); 
        oos.close(); 
        Log.i("AAA","finished serialize");
        } 
        catch(Exception e) { 
        Log.i("aaa","Exception during serialization: " + e); 
        System.exit(0); 
        } 
}

public void deserializeFile()
{
    try { 
        FileInputStream fis = new FileInputStream(file); 
        ObjectInputStream ois = new ObjectInputStream(fis); 
        ObjectNode obj=(ObjectNode)ois.readObject();
        Log.i("aaa","obj: "+obj.ts());
        //a.add((ObjectNode) ois.readObject()); 
        ois.close(); 
        Log.i("aaa","after serialize: " + a); 
        } 
        catch(Exception e) { 
        Log.i("aaa","Exception during deserialization: " + 
        e); 
        System.exit(0); 
        } 
        }

それをシリアル化するためにすべてを文字列にし、逆シリアル化後に文字列を実際に必要なものに戻すための最善のオプションはありますか?

4

2 に答える 2

2

をシリアル化aしていますArrayList<ObjectNode>

oos.writeObject(a); 

逆シリアル化すると、正確にそれが返されますが、それを次のように保存しようとしますObjectNode

ObjectNode obj=(ObjectNode)ois.readObject();

やったほうがいい

ArrayList<ObjectNode> obj = (ArrayList<ObjectNode>)ois.readObject();

更新: または、PeterLawrey が正しく述べているように、

List<ObjectNode> obj = (List<ObjectNode>) ois.readObject;

(おそらく、次のように再定義する必要がありますがaList<ObjectNode>それは別の良い方法です)。

于 2012-12-26T22:42:25.383 に答える
2

あなたはArrayListを書いています。これは、それを読むときにArrayList(またはより良い、List)にキャストする必要があることを意味します。

于 2012-12-26T22:42:44.943 に答える