[英]How to understand Realm's behavior on android?
我嘗試更深入地了解Realm,我在項目中使用了幾天,對我來說還無法理解一些奇怪的行為,在文檔中我找不到任何有用的信息,而是在他們的示例應用中查看過但仍然沒有足夠的信息,所以任何人都可以向我解釋。 為什么Realm返回的模型為空,在瀏覽器中它顯示正確的數據,而不是在調試模式下。
根據樣本“簡介示例”,以下是代碼段:
private void basicCRUD(Realm realm) {
showStatus("Perform basic Create/Read/Update/Delete (CRUD) operations...");
// All writes must be wrapped in a transaction to facilitate safe multi threading
realm.beginTransaction();
// Add a person
Person person = realm.createObject(Person.class);
person.setId(1);
person.setName("Young Person");
person.setAge(14);
// When the transaction is committed, all changes a synced to disk.
realm.commitTransaction();
// Find the first person (no query conditions) and read a field
person = realm.where(Person.class).findFirst();
showStatus(person.getName() + ":" + person.getAge());
// Update person in a transaction
realm.beginTransaction();
person.setName("Senior Person");
person.setAge(99);
showStatus(person.getName() + " got older: " + person.getAge());
realm.commitTransaction();
// Delete all persons
realm.beginTransaction();
realm.allObjects(Person.class).clear();
realm.commitTransaction();
}
我整天都在度過。 接下來的主要問題是,我在一個帶適配器的片段中有一個活動A(讓我們說它具有兔子的模型並顯示他的4個胡蘿卜),在片段上單擊“ +”后,我將替換為一個新片段,在其中創建3個胡蘿卜,然后在popBackStack()之后,我不會將這3個胡蘿卜添加到前面的4個中。
我該怎么做: 活動 (有一個Rabbit實例,其中有4個胡蘿卜,保存在Realm中)-> 片段A(4個胡蘿卜) -> Fragment B ( 從Realm中獲取實例,胡蘿卜為空,為什么?我不會添加3胡蘿卜並保存到Realm我的兔子)-> popBackStack- > OnCreateView Framgent A (從Realm中獲取Rabbit,適配器嘗試顯示數據,但胡蘿卜為空。回家)。
領域是零拷貝數據庫。 這意味着與ORM不一樣,ORM會將所有數據復制到Java堆中,然后再訪問它,我們將所有數據存儲在本機內存中。 您可以將RealmObjects視為類型安全的游標對象。 這也意味着IntelliJ調試器將不會顯示正確的值,因為它會顯示Java堆中的值。 我們使用代理類覆蓋您的getter和setter的行為(在屏幕截圖中:PersonRealmProxy),這就是為什么使用getX()
方法將返回正確值的原因。
關於第二個問題,那么在GitHub上創建一個問題會更容易,因此我們可以要求更多詳細信息: https : //github.com/realm/realm-java/issues
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.