在Android应用中抽象Realm的正确方法

前端之家收集整理的这篇文章主要介绍了在Android应用中抽象Realm的正确方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Android应用程序中尝试Realm.io,为了保持安全,我想抽象数据库层,以便在需要时我可以切换回基于标准sqlite的数据库而无需重写大多数应用程序.

然而,由于它的特殊性,我发现很难正确地抽象Realm:

>当绑定到领域时,RealmObjects是代理,所以我不能传递它们,因为它们是POJO.
>所有Realm实例都需要针对它们使用的每个线程正确打开和关闭.

我已经使用最近的Realm.copyFromRealm()API而不是传递绑定到Realm的RealmObjects来解决这些限制,但这样我觉得我失去了使用域的所有好处(我呢?).

有什么建议?

解决方法

我会尽力回答你的第一个困惑.
实际上没有必要通过意图传递RealmObjects,或者在其他方面不需要它们是可分区的或可序列化的

您应该做的是通过intent传递特定主要ID或该特定RealmObject的其他参数,以便您可以在下一个活动中再次查询该RealmObject.

例如,假设您在启动活动时传递primaryId,

Intent intent = new Intent(this,NextActivity.class);
intent.putExtra(Constants.INTENT_EXTRA_PRIMARY_ID,id);

现在在NextActivity里面从intent获取id并简单地查询RealmObject,即

int primaryId = getIntent().getIntExtra(Constants.INTENT_EXTRA_PRIMARY_ID,-1);
YourRealmObject mObject = realm.where(YourRealmObject.class).equalTo("id",primaryId).findFirst();

看,你在新的活动中得到了你的对象,而不是担心传递对象.

我不知道你打开和关闭领域对象有什么特别的问题.您是否尝试过Realm的Transaction块?如果使用它,则无需依赖打开和关闭.

我希望这有帮助.

更新

既然你在寻找抽象,

只需创建一个类似DbUtils的类,并在其中有一个方法,如getYourObjectById,然后传递上面的id并检索您的对象作为回报.这使它在某种程度上变得抽象.然后,您可以保留该类和方法,如果您切换到另一个数据库解决方案,只需更改方法内容.

原文链接:https://www.f2er.com/android/309793.html

猜你在找的Android相关文章