您好,在我的应用程序中,我正在保存用户输入的字符串信息。然后将这些字符串序列化以便以后进行回溯。当我打开文件到他们保存的地方时,我总是只得到输入的最后一个字符串。你能看出我错在哪里吗?
这是回溯代码
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
答案 0 :(得分:0)
你正在以错误的方式做两件事:
setListAdapter
,虽然它可能对你没有任何伤害,你不需要。onClick
方法中的代码没有达到您的预期,它只是覆盖您上次序列化的数据。您需要使用ObjectInputStream
重新构造过去序列化的对象,然后将当前对象添加到对象图中(我认为您需要一个List),然后您可以安全地序列化文件中的所有对象而无需覆盖旧物件。即使您可以序列化这样的对象,我建议您将数据存储在SQLite数据库中,而不是使用Java序列化,重建大量不相关的对象只是为了存储另一个对象是过度的。使用SQLite,您INSERT
一条记录到数据库,然后您可以SELECT
来自数据库的所有记录,它很快,您的代码将更加简洁。