2011-01-13 52 views
0

我使用db4o的方式其實只是只讀。我將打包一個數據庫與應用程序,並做一些後臺更新,每隔一段時間我可以處理不同。但是對於我從數據庫中顯示數據的活動,我不需要做任何更新,所以出於這個原因,我只想從數據庫中獲取數據並讓數據「停用」,這樣當活動由於屏幕方向改變等原因導致配置發生變化,我可以快速重新佈局活動。什麼是停用對象的正確方法,以便它們對我的活動仍然有用。目前,我有代碼像android db4o正確停用對象

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

我試圖做這樣的事情

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

,但它似乎並沒有work.Do我需要在列表中的每個項目迭代停用呢?

當你在android上改變屏幕方向時,它在我關閉數據庫的時候擊中了我的活動close方法。但後來開始備份,我不想再次填充mList。

所以我不斷收到一個「com.db4o.ext.DatabaseClosedException」異常,因爲在我的活動我做的事情一樣

mList.size() 

的佈局我真的只是想取消畫線B/CI從來沒有更新他們,怎麼能我這樣做?

回答

4

首先,你要確保所有的對象都被加載。 db4o只返回一個延遲加載列表,當你訪問它時加載對象。您需要將對象複製到不需要運行數據庫的常規列表中。這很簡單,只是將查詢結果傳遞給一個新的數組列表:

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

現在你不應該得到一個DatabaseClosedException。

然後我只想補充一點,db4o中的「停用」是完全不同的。它與Activation機制有關。取消激活與激活相反。激活從數據庫加載到內存中。取消激活使內存中的對象變爲空殼體,而不包含任何數據。明確的停用僅適用於安全內存的特殊場景。

+0

啊,很高興知道,我已停用理解不正確,謝謝澄清。 – slim 2011-01-14 16:55:29