2016-05-11 4 views
1

こんにちは、私は私が点検した場合ストレージが自動的に1

private void addItemToRecentListStorage1(Hashtable h){ Storage s1 = Storage.getInstance(); ArrayList<Hashtable> a = (ArrayList<Hashtable>)s1.readObject("RecentItems"); ... ... a.add(0,h);//adding on top s1.writeObject("RecentItems", a); }

を使用して、ストレージ内のArrayListを書いていますコードネームでクリアされ、S1、直ちに第一の要素を追加した後、それは、ストレージ階層に適切に私を示しています。

1st entry has 4 elements

しかし、ブランク要素として示しているが第2要素(ハッシュテーブル)を添加する時点では、ハッシュテーブルの値を記憶された第1のクリア。

before adding 2nd entry

手段、私はreadObjectメソッドによって配列リスト1つの要素(ハッシュテーブル)を取得しています()が、そのハッシュテーブルのすべての4つの要素が一掃されています。これは以前はうまくいきましたが、現在はarraylistからHashTableデータを消去しています。

だから、要素を追加するたびに、要素の数が1つ増えます。しかし、以前のすべてのハッシュテーブルの値はクリアされます。

エミュレータとデバイスで同じことが起こっています。

答えて

0

アレイ内のいくつかのオブジェクトのシリアル化が失敗したために発生した可能性のある例外がコンソールにあるかどうかを確認してください。

+0

遅くて申し訳ありませんが、出力でデバッガコンソールをチェックしましたが、残念ながら例外または警告が表示されませんでした。 –

+0

しかし、私が気づいた奇妙なことは、1番目のアイテムを追加してエミュレータを閉じた後にもう一度プロジェクトを実行し、2番目のアイテムを追加すると両方のアイテムが表示されるということです。つまり、複数の項目を追加すると、1回の実行でストレージから読み取られません。しかし、私はエミュレータを閉じて、各項目のために再び起動すると、すべての項目(記憶要素)を正しく読み込みます。ストレージファイルを保持しているリソースがあれば、これが発生する可能性がありますか?または1回の実行カーソル内で1つのレコードを指している可能性があります。そして、2番目のレコードをストレージに追加すると、最初のレコードが解放されますか? –

+1

並行使用の可能性はありますか?私の推測では、RecentItemsへの2つの同時アクセスがあるということです。 1人は単一のアイテムの配列を読み込んで両方を保存し、そのうちの1人がレースに勝利します。 –

関連する問題