无法检索所有已保存的对象并在listView中显示

时间:2012-03-24 16:15:22

标签: android

您好,在我的应用程序中,我正在保存用户输入的字符串信息。然后将这些字符串序列化以便以后进行回溯。当我打开文件到他们保存的地方时,我总是只得到输入的最后一个字符串。你能看出我错在哪里吗?

这是回溯代码

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.lightlist);


    adapter = new ArrayAdapter<String>(LightList.this, android.R.layout.simple_list_item_1, lightNames);

    refreshBut = (Button)findViewById(R.id.button1);

             try {
                 File file = getCacheDir();
                fis = new FileInputStream(new File(file, LightSetup.FILENAME ));

                ois = new ObjectInputStream(fis);
                             String a;          
                            while((a = (String)ois.readObject()) != null){

                        adapter.add(a);

                        setListAdapter(adapter);
                }

                  ois.close();
            } catch (FileNotFoundException e) {e.printStackTrace();} catch (StreamCorruptedException e){e.printStackTrace();
            } catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}
}//end onCreate

这是序列化代码

public void onClick(查看arg0){

    String stringData = data.getText().toString();      
        try {

        File file = getCacheDir(); 
        fos = new FileOutputStream(new File(file,FILENAME ));
        os = new ObjectOutputStream(fos);
        os.writeObject(stringData);
        fos.close();
        os.close();

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

    Intent i = new Intent("com.Sonny.HCIProject.CreateConfirm");
    startActivity(i);
    finish();

}//end onClick

1 个答案:

答案 0 :(得分:0)

你正在以错误的方式做两件事:

  1. 你没有循环setListAdapter,虽然它可能对你没有任何伤害,你不需要。
  2. onClick方法中的代码没有达到您的预期,它只是覆盖您上次序列化的数据。您需要使用ObjectInputStream重新构造过去序列化的对象,然后将当前对象添加到对象图中(我认为您需要一个List),然后您可以安全地序列化文件中的所有对象而无需覆盖旧物件。
  3. 即使您可以序列化这样的对象,我建议您将数据存储在SQLite数据库中,而不是使用Java序列化,重建大量不相关的对象只是为了存储另一个对象是过度的。使用SQLite,您INSERT一条记录到数据库,然后您可以SELECT来自数据库的所有记录,它很快,您的代码将更加简洁。