java - 如何理解 Realm 在 android 上的行为?

标签 java android realm

我尝试更深入地了解 Realm,我最近几天在我们的项目中使用它,并且无法理解一些奇怪的行为,对于我来说,在文档中我没有找到任何有用的信息,我查看了他们的示例应用程序,但仍然没有足够的信息,所以任何人都可以解释我。为什么 Realm 返回的模型是空的,在浏览器中它显示正确的数据,但在 Debug模式下不显示。 realm debug

根据示例“介绍示例”,以下是代码 fragment :

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();
}

我花了一整天的时间。接下来我的主要问题是,我在带有适配器的一个 fragment 中有一个 Activity A(假设有兔子的模型并显示他的 4 个胡萝卜),在 fragment 上单击“+”后,我用一个新 fragment 替换,在其中创建了 3 个胡萝卜,然后在 popBackStack() 之后我不会将这 3 个胡萝卜添加到之前的 4 个胡萝卜中。

我是如何做到的: Activity (有兔子实例,有 4 个胡萝卜,保存在 Realm 中)--> fragment A(4 个胡萝卜)-->< strong> fragment B(从Realm获取实例,胡萝卜是空的,为什么?我不会添加3个胡萝卜并保存到Realm我的兔子)-->popBackStack -->OnCreateView Framgent A(从 Realm 获取 Rabbit,适配器尝试显示数据,但胡萝卜是空的。回家)。

最佳答案

Realm 是一个零拷贝数据库。这意味着,与 ORM 在访问之前将所有数据复制到 Java 堆不同,我们将所有数据存储在 native 内存中。您可以将 RealmObjects 视为类型安全的游标对象。这也意味着 IntelliJ 调试器不会显示正确的值,因为它显示的是 Java 堆中的值。我们使用代理类来覆盖 getter 和 setter 的行为(在屏幕截图中:PersonRealmProxy),这就是为什么使用 getX() 方法将返回正确的值。

关于第二个问题,在 GitHub 上创建问题会更容易,这样我们就可以询问更多详细信息:https://github.com/realm/realm-java/issues

关于java - 如何理解 Realm 在 android 上的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34013129/

相关文章:

java - struts2-jquery 标签中无法识别动态输入

java - 优化算法 [编译就绪代码]

java - 获取javax swing计时器值

java - 分割操作栏底部颜色

android - 无法在调试中观看 RealmObjects (Android Studio)

Android:如何在 ActionBarSherlock 选项卡中加载 Activity ?

android - 在 Android 中使用 GLU ES

swift - RealmSwift v0.96 - 使用未声明的类型 "Results"

ios - 隐藏表格中选定的单元格 - Swift4

setDefaultConfiguration 的 Android Realm 问题