0

Java アプリケーションを Android に移植しようとしています。アプリケーションは Serializable を使用してデータを保存します。ユーザーの配列リストがあり、各ユーザーには他のさまざまな要素があります (これらはすべてシリアライズ可能を実装しています)。Java アプリでは、シリアル化されたユーザー リストをテキスト ファイルに書き込むメソッドを呼び出すだけで、すべてのデータを保存できました。これは Android では動作しないようです。

ファイルが見つからない、または IO 例外ではありません - 私はすでにそれを処理しました。

これを回避する方法についてのアイデアはありますか?

public boolean loadUsers()
    {
        File newFile = new File("sdcard/download/users.txt");
        FileInputStream fileIn = null;
    try 
    {
        fileIn = new FileInputStream(newFile);
        ObjectInputStream inStream = new ObjectInputStream(fileIn);
        users = (ArrayList<User>)inStream.readObject();
        fileIn.close();
        return true;
    } 
    catch (FileNotFoundException e) 
    {
        System.err.println("File not found exception...");
    }
    catch (IOException e)
    {
        System.err.println("Error occurred reading the file, aborting...");
    }
    catch (Exception e)
    {
        System.err.println("Unexpected exception...");
    }
    return false;
}

私はそれを理解しました-パッケージ名を変更したため、古いシリアル化されたファイルがその理由で正しく読み取られません。それ以外の場合はすべて正常に動作します。

4

1 に答える 1

1

オブジェクトを逆シリアル化しようとしているときに ClassNotFoundException が発生する場合は、シリアル ストリーム内のオブジェクトのクラスパスにクラスがないことを意味している可能性があります。関連する JAR ファイル (または何でも) をクラスパスに追加する必要があります。完全な例外メッセージ/スタックトレースは、欠落しているクラスを教えてくれます...

(これは Android 固有の問題ではありません。シリアル化されたオブジェクト ストリームには、クラスのバイトコードが含まれていません。JVM は、ストリームから使用可能なオブジェクトを再構築する前に、これらのバイトコードを持っている必要があります。)


私はそれを理解しました-パッケージ名を変更したため、古いシリアル化されたファイルがその理由で正しく読み取られません。

それは正しい。パッケージ名を変更すると、クラスは別のクラスになります... JVMに関する限り。

于 2013-04-27T01:15:21.273 に答える