我正在尝试将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;
}
我已经弄明白了 - 我更改了包名,因此旧的序列化文件因此没有被正确读取。一切都运行正常。
答案 0 :(得分:1)
当您尝试反序列化对象时,ClassNotFoundException很可能意味着您的类路径中没有类用于串行流中的对象。您需要将相关的JAR文件(或其他)添加到类路径中。完整的异常消息/ stacktrace将告诉您它缺少哪个类...
(这不是特定于Android的问题。序列化对象流不包含类的字节码.JVM在从流中重新组装可用对象之前需要具有这些字节码。)
我已经弄明白了 - 我更改了包名,因此旧的序列化文件因此没有被正确读取。
没错。当您更改包名称时,该类将成为另一个类...就JVM而言。