Java 我的arrayList没有';无法成功保存和还原?

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

我有一个包含listview的活动,该活动(
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();
    }
}
但是,它只显示通过添加家庭作业活动添加的项目,而不显示那些“已保存”和“已还原”的项目(它们未成功保存/还原),这是为什么?

它有两个问题

  • listview仍与旧适配器连接

  • notifyDataSetChanged在您的情况下可能不起作用,它与此答案相关

  • 您需要在onResume()中对命令重新排序

    @覆盖
    恢复时公开作废(){
    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
    
    }