我在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类。感谢大家的帮助。祝每个人都过得愉快
答案 0 :(得分:1)
您要保存到gradle compileJava
,但请从MyMovieArray.srl
开始阅读。另请阅读MyMovieArray
MyMovieArray.srl
对象(写入和读取):
File
答案 1 :(得分:1)
使用File f = new File(getFilesDir(), "MyMovieArray.srl");
在writeArray()和read()方法中