2012-03-24 62 views
0

嗨在我的应用程序中,我保存了用户输入的字符串信息。然后序列化这些字符串以供稍后检索。当我打开文件到他们保存的位置时,我总是只收到输入的最后一个字符串。你能看到我要去哪里吗?无法检索所有保存的对象,并显示在列表中

这是retrival代码

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 

这是序列化代码

公共无效的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

发布您的适配器 – Blackbelt 2012-03-24 16:23:41

回答

0

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

  1. 你不要做setListAdapter在一个循环中,尽管它可能不会对您造成任何伤害,您并不需要。
  2. onClick方法中的代码不符合您的期望,它只是覆盖您上次序列化的数据。您需要重新构建过去使用ObjectInputStream序列化的对象,然后将当前对象添加到对象图(我认为您需要一个List),然后可以安全地序列化文件中的所有对象而不覆盖旧对象。

甚至可以序列喜欢的对象,我建议你在SQLite数据库存储在使用Java序列化,重建了一大堆不相关的对象,只是为了保存另一个对象是矫枉过正的代替数据。用SQLite,你可以将一条记录到数据库中,然后你可以从数据库的所有记录中获得SELECT,它速度很快,你的代码会更简洁。

+0

@Neevak感谢您的建议,我建立了SQLite,但获取字符串并不容易。学习SQLite的权利很大。我认为序列化每个字符串将是一条快速而又快捷的路线。 – codingNightmares 2012-03-24 18:34:10

+0

谷歌搜索“android sqlite”给出了很多资源。 Java序列化可以做你想做的事情,但这并不是最好的方式,正如我在答案中所解释的那样。 – neevek 2012-03-25 02:13:51

+0

顺便说一句,如果这回答你的问题,请标记为答案:) – neevek 2012-03-25 02:15:08

相关问题