保存对象的arraylist并从文件

时间:2015-04-23 21:11:24

标签: android android-file

我在fragmentActivity中有一个对象的arraylist

private List<Movie> myMovies = null;

我可以选择添加,删除以及电影列表中的所有内容,但是一旦我关闭应用程序,所有内容都将丢失。如何将数组保存到文件中并从文件中检索数组?

我有:

public void writeArray() {
    File f = new File(getFilesDir()+"MyMovieArray.srl");
    try {
        FileOutputStream fos = new FileOutputStream(f);
        ObjectOutputStream objectwrite = new ObjectOutputStream(fos);
        objectwrite.writeObject(myMovies);
        fos.close();

        if (!f.exists()) {
            f.mkdirs();
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

 public ArrayList<Movie> read(Context context) {

      ObjectInputStream input = null;
      ArrayList<Movie> ReturnClass = null;
      File f = new File(this.getFilesDir(),"MyMovieArray");
      try {

       input = new ObjectInputStream(new FileInputStream(f));
       ReturnClass = (ArrayList<Movie>) input.readObject();
       input.close();

      } catch (StreamCorruptedException e) {
       e.printStackTrace();
      } catch (FileNotFoundException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      } catch (ClassNotFoundException e) {
       e.printStackTrace();
      }
      return ReturnClass;
     }

但它不起作用。 getFilesDir()始终指向nullpointerexception 这是正确的方法吗? 有关如何将数组保存到文件并从文件中检索数组的任何消息?

UPDATE 1:找到修复程序,只需编写File f = new File(getFilesDir(),&#34; MyMovieArray.srl&#34;); 新问题出现了:我有onCreate的代码:

myMovies = read(this);
    if(myMovies==null){
        myMovies = new ArrayList<Movie>();
        populateMovieListWithExamples();
        writeArray();
    }

每次我启动应用程序时,它总是显示带有填充示例的列表...如果我重新打开它时添加或删除它总是相同的列表。建议吗?

更新2 只需要要序列化的Movie类。感谢大家的帮助。祝每个人都过得愉快

2 个答案:

答案 0 :(得分:1)

您要保存到gradle compileJava ,但请从MyMovieArray.srl开始阅读。另请阅读MyMovieArray

应该像这样创建

MyMovieArray.srl对象(写入和读取):

File

答案 1 :(得分:1)

使用File f = new File(getFilesDir(), "MyMovieArray.srl");

在writeArray()和read()方法中