Java 我的arrayList没有';无法成功保存和还原?
我有一个包含listview的活动,该活动(Java 我的arrayList没有';无法成功保存和还原?,java,android,file,listview,object,Java,Android,File,Listview,Object,我有一个包含listview的活动,该活动(MainActivity)启动另一个活动(HomeworkAddActivity),这将从用户检索一个字符串并将其添加到listview(上述所有工作) 但是,为了让listview在启动其他活动时“记住”其内容,我尝试将列表保存到文件中,代码: public void saveHomework() { try { @SuppressWarnings("resource") FileOutputStream fo
MainActivity
)启动另一个活动(HomeworkAddActivity
),这将从用户检索一个字符串并将其添加到listview(上述所有工作)
但是,为了让listview在启动其他活动时“记住”其内容,我尝试将列表保存到文件中,代码:
public void saveHomework() {
try {
@SuppressWarnings("resource")
FileOutputStream fos = new FileOutputStream(homeworkFileName);
fos = openFileOutput(homeworkFileName,
Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(homeworkItems);
os.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public void populateHomework() {
try {
@SuppressWarnings("resource")
FileInputStream fis = new FileInputStream(homeworkFileName);
fis = getParent().openFileInput(homeworkFileName);
ObjectInputStream is = new ObjectInputStream(fis);
homeworkItems = (ArrayList<String>) is.readObject();
is.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (StreamCorruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
但是,它只显示通过添加家庭作业活动添加的项目,而不显示那些“已保存”和“已还原”的项目(它们未成功保存/还原),这是为什么?它有两个问题
@覆盖
恢复时公开作废(){
super.onResume();
homeworkItems=新的ArrayList();
活动=此;
PopulateHomegram();//我将此行上移
homeworkListAdapter=新阵列适配器(此,
android.R.layout.simple_list_item_1,homeworkinms);
//homeworkListAdapter.notifyDataSetChanged();//此行可能不起作用
yourListView.setAdapter(homeworkListAdapter);//因为您的listview仍与旧的ArrayAdapter连接
}
确保已检查家庭作业文件是否存在!如果使用外部存储,还要确保权限!其他一切似乎都很好!我没有收到您的问题,您有一个列表(假设调用列表A),然后在暂停时保存,然后在恢复时还原()。。。然后呢?@ashu我正在使用内部存储,我的印象是打开流填充了文件。@Toonsue关键点是保存和还原不起作用,我会/已经更新了这个问题。另外,在恢复后,列表被放入列表视图中。我会尝试这个,它有意义,会让ypu知道它是如何运行的。所以,我相信,通知。。。在列表随新项目更新时(但仅限新项目)工作
@Override
public void onResume() {
super.onResume();
homeworkItems = new ArrayList<String>();
activity = this;
homeworkListAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, homeworkItems);
populateHomework();
homeworkListAdapter.notifyDataSetChanged();
}
@Override
public void onResume() {
super.onResume();
homeworkItems = new ArrayList<String>();
activity = this;
populateHomework(); // I move this line up
homeworkListAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, homeworkItems);
//homeworkListAdapter.notifyDataSetChanged(); // this line might not work
yourListView.setAdapter(homeworkListAdapter); // because your listview still connect with your old ArrayAdapter
}