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 回答