簡體   English   中英

如何了解Realm在Android上的行為?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM