将java应用程序移植到android - 是否可以使Serializable工作?

时间:2013-04-27 00:50:07

标签: java android persistence serializable

我正在尝试将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;
}

我已经弄明白了 - 我更改了包名,因此旧的序列化文件因此没有被正确读取。一切都运行正常。

1 个答案:

答案 0 :(得分:1)

当您尝试反序列化对象时,ClassNotFoundException很可能意味着您的类路径中没有类用于串行流中的对象。您需要将相关的JAR文件(或其他)添加到类路径中。完整的异常消息/ stacktrace将告诉您它缺少哪个类...

(这不是特定于Android的问题。序列化对象流不包含类的字节码.JVM在从流中重新组装可用对象之前需要具有这些字节码。)


  

我已经弄明白了 - 我更改了包名,因此旧的序列化文件因此没有被正确读取。

没错。当您更改包名称时,该类将成为另一个类...就JVM而言。