2012-03-24 5 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 

であり、これは、シリアル化コードである

ます。public void onClickの(表示arg0に)あなたは間違った方法で2つのことをやっている{

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

答えて

0

  1. setListAdapterはループしていますが、それはあなたに何らかの害を及ぼさないかもしれませんが、必要はありません。
  2. onClickメソッドのコードは、前回のシリアライズしたデータを上書きします。あなたは、ObjectInputStreamを使って過去にシリアライズしたオブジェクトを再構成し、現在のオブジェクトをオブジェクトグラフに追加する必要があります(リストが必要です)、古いオブジェクトを上書きせずにファイル内のすべてのオブジェクトを安全にシリアル化できます。

でもあなたがそのようなオブジェクトをシリアル化することができ、私はあなただけの別の目的は、過剰です保存するために無関係なオブジェクトの全体の多くを再構築、Javaのシリアル化を使用しての代わりにSQLiteのデータベースにデータを保存をお勧めします。 SQLiteを使用すると、データベースにINSERTのレコードが格納され、SELECTデータベースからすべてのレコードを取得できます。高速でコードがより簡潔になります。

+0

@Neevakはアドバイスをいただきありがとうございます。私はSQLiteをセットアップしましたが、文字列を取得するのは簡単ではありませんでした。 SQLiteを正しく取得するための大きな学習曲線。私は、すべての文字列をシリアライズすることが速くて速い方法だと思った。 – codingNightmares

+0

グーグル "アンドロイドsqlite"は、多くのリソースを提供します。 Javaのシリアライゼーションは、あなたが望むことをしますが、私が答えで説明したように、それは最善の方法ではありません。 – neevek

+0

ところで、あなたの質問に答えた場合は、答えとしてマークしてください:) – neevek

関連する問題