2011-01-13 10 views
0

私がdb4oを使用している方法は、実際には読み取り専用です。私はアプリケーションとdbをパッケージ化し、いくつかのバックグラウンドを毎回更新し、やり直して別に扱うことができます。しかし、dbからのデータを表示している私の活動のために、私は更新を行う必要はないので、私はちょうどdbからデータを取得し、そのデータを "非アクティブ"にしたいので、画面の向きが変更されたり、何かのためにconfigurationChangeが発生した場合、すぐにアクティビティを再度レイアウトすることができます。オブジェクトを非アクティブ化して自分のアクティビティに引き続き使用できる適切な方法は何ですか?現在、私はandroid db4oは正しくオブジェクトを非アクティブ化します

List<MyObject> mList = db().queryByExample(persistentClass); // db just gets my ObjectContainer 

私はこの

db().ext().deactivate(mList); 

ような何かをやって試してみましたが、私はそれを無効にするには、リストの各項目を反復処理する必要があるwork.Doに思えていないようなコードの何かを持っていますか?

アンドロイドで画面の向きを変更すると、私はデータベースを閉じる私の活動のクローズ方法にヒットします。しかし、それからバックアップが始まり、私はmListをもう一度読み込みたくありません。

私は

mList.size() 

のようなものは、私は本当にただのB/CIオブジェクトを無効にしたい活動の私のレイアウトでそれらを更新する必要はありませんので、私はどのようにすることができ、「com.db4o.ext.DatabaseClosedException」例外を得続けます私はこれをします?

答えて

4

まず、すべてのオブジェクトがロードされていることを確認します。 db4oは、オブジェクトにアクセスするときにオブジェクトをロードするレイジーローディングリストのみを返します。実行中のデータベースを必要としない通常のリストにオブジェクトをコピーする必要があります。これは非常に単純です。クエリの結果を新しい配列リストに渡すだけです。

List<MyObject> mList = new ArrayList<MyObject>(db().queryByExample(persistentClass)); 

DatabaseClosedExceptionを取得しないでください。

次に、db4oの '無効化'が全く違うものだと付け加えたいと思います。それはActivation - 機構と関係がある。無効化は有効化の反対です。アクティベーションは、オブジェクトからデータベースにメモリに読み込まれます。無効にすると、メモリ内のオブジェクトがデータのない空のハルになります。明示的な非アクティブ化は、安全なメモリに対する特別なシナリオでのみ有効です。

+0

ああ、知っておいてよかった、私は失効を間違って理解していました。 – slim

関連する問題