在Android加入和使用Realm
2015-11-18 13:04
363 查看
原文链接:Up and Running With Realm for Android
和SQLite相比,Realm速度更快并且它有很多先进的特性,例如对JSON的支持,流畅的API,数据变化通知(观察者),加密支持… 所有的这一切都会让android开发者日子过得更潇洒(这里扯淡了,开发者日子怎么可能潇洒,当然也可能是国内外不同…)。
这篇文章的主题就是Realm for Android, 在这篇文章中,我将使用Realm v0.84.1。
想要创建一个Realm, 你可以在任意一个
需要注意的是,我们这样创建,没有给它指定
如果你需要创建另外一个Realm,那你就必须要给它传递
可以使用
使用
你可能已经注意到了,
如果你必须要使用构造方法的话,别忘了在提交事务之前调用
除此之外, 你还可以使用
如果你想让查询结果按照某个顺序来,你可以使用
想要学习更多关于
介绍
如果你比较关心android开发的最新动态的话,那么你肯定会听说过Realm,Realm是一个轻量级的数据库,在Android开发中,它可以替代SQLite和ORM框架。和SQLite相比,Realm速度更快并且它有很多先进的特性,例如对JSON的支持,流畅的API,数据变化通知(观察者),加密支持… 所有的这一切都会让android开发者日子过得更潇洒(这里扯淡了,开发者日子怎么可能潇洒,当然也可能是国内外不同…)。
这篇文章的主题就是Realm for Android, 在这篇文章中,我将使用Realm v0.84.1。
将Realm添加到项目
要在Android项目中使用Realm, 你需要在module的build.gradle文件中添加如下代码:compile 'io.realm:realm-android:0.84.1'
创建一个Realm
一个Realm和SQLite比较类似。它有一个文件和他作为关联,这个文件一次创建,就会永久存在Android系统中。想要创建一个Realm, 你可以在任意一个
Activity中调用静态方法
Realm.getInstance。
Realm myRealm = Realm.getInstance(context);
需要注意的是,我们这样创建,没有给它指定
RealmConfiguration,这时候创建的文件会使用默认的文件名default.realm。
如果你需要创建另外一个Realm,那你就必须要给它传递
RealmConfiguration.Builder了,并且要给它指定一个唯一的名称。
Realm myOtherRealm = Realm.getInstance( new RealmConfiguration.Builder(context) .name("myOtherRealm.realm") .build() );
创建RealmObject
如果一个javabean继承了RealmObject,那么它就可以用来存储Realm,如果你想知道什么是javabean,来看看这里的定义:javabean是可序列化的,有一个默认的构造方法,成员变量都提供getter和setter方法。例如,下面的代码可以轻松的保存到Realm中,
public class Country extends RealmObject { private String name; private int population; public Country() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } }
可以使用
@PrimaryKey注解来表示这个一个成员变量是Realm的主键。例如下面的代码是将
code字段作为主键,
@PrimaryKey private String code; public String getCode() { return code; } public void setCode(String code) { this.code = code; }
创建事务
你将会在下面的代码中发现,使用Realm查询数据非常简单, 写入数据稍稍麻烦点。Realm遵循ACID以保证操作的原子性和一致性。在Realm中,所有的写操作都会在一个事务中。使用
beginTransaction方法可以开启一个事务,使用
commitTransaction方法去提交一个事务。下面的代码表明如何创建并保存一个
Country,
myRealm.beginTransaction(); // Create an object Country country1 = myRealm.createObject(Country.class); // Set its fields country1.setName("Norway"); country1.setPopulation(5165800); country1.setCode("NO"); myRealm.commitTransaction();
你可能已经注意到了,
country1对象并不是使用
Country的构造方法创建的,想让
RealmObject保存这个实例, 就必须使用
createObject方法创建。
如果你必须要使用构造方法的话,别忘了在提交事务之前调用
copyToRealm方法将对象关联到
Realm上,例如:
// Create the object Country country2 = new Country(); country2.setName("Russia"); country2.setPopulation(146430430); country2.setCode("RU"); myRealm.beginTransaction(); Country copyOfCountry2 = myRealm.copyToRealm(country2); myRealm.commitTransaction();
查询
Realm提供了一套非常直观简单的API用来查询操作,调用Realm的
where方法,并且将你需要的类的class传递进去, 你就完成了一个查询的创建,之后, 你可以调用
findAll方法来遍历所有的数据,返回的数据保存在
RealmResults对象中,下面的例子,我们查询出来并且打印了所有的
Country
RealmResults<Country> results1 = myRealm.where(Country.class).findAll(); for(Country c:results1) { Log.d("results1", c.getName()); } // Prints Norway, RussiaRealmResults<Country> results1 = myRealm.where(Country.class).findAll(); for(Country c:results1) { Log.d("results1", c.getName()); } // Prints Norway, Russia
除此之外, 你还可以使用
beginsWith,
endsWith,
lesserThan和
greaterThan方法来过滤结果,下面的例如展示了如何使用
greaterThan方法来查询所有的
population大于1亿的
Country,
RealmResults<Country> results2 = myRealm.where(Country.class) .greaterThan("population", 100000000) .findAll(); // Gets only Russia
如果你想让查询结果按照某个顺序来,你可以使用
findAllSorted方法,它有一个String类型的参数和一个boolean类型的参数,其中,String指定用来排序的字段,boolean指定了排序方式,
// Sort by name, 降序排列 RealmResults<Country> results3 = myRealm.where(Country.class) .findAllSorted("name", false); // Gets Russia, Norway
想要学习更多关于
Realm的知识,可以参考官方文档
相关文章推荐
- 【Android】System.exit(0) 退出程序
- Android中TelephonyMnager的使用
- Android线程间通信(一):Message
- android事件分发机制
- android-Viewflow开源项目学习
- JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
- JNI学习积累之一 ---- 常用函数大全
- Android编程根据系列图片绘制动画实例总结
- Android AIDL的简单例子
- 一篇文章看懂Android学习最佳路线
- 疯狂Android之图片浏览器
- Android编程向服务器发送请求时出现中文乱码问题的解决方法
- android中onInterceptTouchEvent()方法详解
- 54、Android 粒子效果之雨(下雨的效果)
- Android 内核解剖 - AMS(Activity Manager Service)
- Android编程实现QQ表情的发送和接收完整实例(附源码)
- Android开发教程:数据储存之SharedPreferences
- 关于在5.0上沉浸式布局虚拟按键的问题
- 关于Android生命周期方法调用return的问题
- 说说Android无限轮播的那些事