0

文字列の配列リストをローカル データベースの 1 列に保存する必要がありました。これを行うにはいくつかの問題があります。誰かが私が間違っているところを教えてもらえますか...

private String serializeArray(List<String> array) {
    try {
        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bytesOut);
        oos.writeObject(array);
        oos.flush();
        oos.close();
        return Base64.encodeToString(bytesOut.toByteArray(), Base64.NO_WRAP);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

private ArrayList<String> deserializeArray(String string) {
    Log.d("USERDAO", string);
    try {
        ByteArrayInputStream bytesIn = new ByteArrayInputStream(Base64.decode(string, Base64.NO_WRAP));
        ObjectInputStream ois = new ObjectInputStream(bytesIn);
        return (ArrayList<String>) ois.readObject();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

逆シリアル化配列で Arraylist を返すときに、null ポインター例外が発生します。serialiseArray メソッドは文字列を返しますが、それが正しいかどうかはわかりません。

4

1 に答える 1

0

これを Eclipse で実行すると、次の行で java.lang.ClassCastException が発生します。

return (ArrayList<String>) ois.readObject();

readObject() メソッドは Arrays$ArrayList (それが何であれ) を返そうとしていますが、キャストが原因で壊れています。デシリアライズのキャストと戻り値の型を List に変更すると、すべてが機能することがわかります。

于 2012-07-20T09:15:14.537 に答える