序列化ArrayList android无法正常工作

时间:2011-03-23 21:43:12

标签: java android serialization

更新:经过一些测试后我确定文件本身没有被创建,至少根据file.exists检查。有什么想法吗?

您好我正在尝试在我的应用程序退出时序列化一个arraylist并在它恢复时将其读回。它似乎没有创建文件。

这是我的代码。

protected void onPause() {
    super.onPause();

    if(!myArrayList.isEmpty())
    {
        final String FILENAME = "myfile.bin";
        try{
            FileOutputStream fos;

            fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);

            //FileOutputStream fileStream = new FileOutputStream(FILENAME);
            ObjectOutputStream os = new ObjectOutputStream(fos);
            os.writeObject(myArrayList);
            os.flush();
            os.close();
        } catch (FileNotFoundException e) {
                e.printStackTrace();
            }catch(IOException e){
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
    }
}

@SuppressWarnings("unchecked")
    @Override
    protected void onResume() {
        super.onResume();

    File file = new File("myfile.bin");
    if(file.exists()){
        final String FILENAME="myfile.bin";
        try{
            FileInputStream fileStream = new FileInputStream(FILENAME);
            ObjectInputStream os = new ObjectInputStream(fileStream);
            myArrayList = (ArrayList<MyObject>)os.readObject();
            os.close();
        } catch (FileNotFoundException e) {
                e.printStackTrace();
            }catch(IOException e){
                e.printStackTrace();
        }
    }




}

有什么想法吗?我的MyObject类实现了serializable。

2 个答案:

答案 0 :(得分:1)

通过将FileInputStream fileStream = new FileInputStream(FILENAME)更改为FileInputStream fileStream= openFileInput(FILENAME)来实现目标。

答案 1 :(得分:0)

os.writeObject(myArrayList);
os.flush();
os.close();

在writeObject之后立即尝试os.close(),它应该调用flush()。