介绍

如果你关注安卓开发的最新趋势,你可能已经听说过 Realm 。Realm是一个可以替代SQLite以及ORMlibraries的轻量级数据库。

相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。

在这篇快速入门教程中,你将学到Android版Realm的基础知识。本教程我们使用的是Realm v0.84.1。

1. 添加Realm到工程

要在安卓工程中使用Realm,你需要在module的build.gradle文件中添加一个添加一个依赖:compile 'io.realm:realm-android:0.84.1'

2. 创建一个Realm

一个Realm相当于一个SQLite数据库。它有一个与之对应的文件,一旦创建将持久保存在安卓的文件系统中。

要创建一个新的Realm,你可以在任意Activity中调用静态方法Realm.getInstance。Realm myRealm = Realm.getInstance(context);

注意,调用Realm.getInstance,而没有传入RealmConfiguration,会创建一个叫做 default.realm的Realm文件。

如果你想向app中添加另一个Realm,必须使用一个RealmConfiguration.Builder对象,并为 Realm file 指定一个独有的名字。Realm myOtherRealm =

Realm.getInstance(                new RealmConfiguration.Builder(context)

.name("myOtherRealm.realm")

.build()

);

3. 创建一个RealmObject

只要继承了RealmObject类,任意JavaBean都能存储在Realm中。不知道JavaBean是什么?它就是一个可序列化的java类,有默认构造器,成员变量有相应的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;

}

}

如果你想让RealmObject的一个成员变量作为主键,你可以使用@PrimaryKey注解。比如,这里演示了如何为Country类添加一个主键code:@PrimaryKeyprivate String code;public String getCode() {    return code;

}public void setCode(String code) {    this.code = code;

}

4. 创建transaction

虽然从一个Realm读取数据非常简单(下一节有讲),但是向它写入数据就稍微复杂一点。Realm遵循 ACID (数据库事务正确执行的四个基本要素的缩写)规范,为了确保原子性和一致性,它强制所有的写入操作都在一个事务中执行。

要开始一个新的事务,使用beginTransaction方法。类似地,要结束这个事务,使用commitTransaction方法。

注:事务即英文里面的transaction。

这里演示了如何创建和保存一个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类的构造器创建的。对于一个Realm来说,管理一个RealmObject的实例,这个实例必须用createObject方法创建。

如果你必须使用构造器,别忘了在提交事务前使用相关Realm对象的copyToRealm方法。这里是示例:// Create the objectCountry country2 = new Country();

country2.setName("Russia");

country2.setPopulation(146430430);

country2.setCode("RU");

myRealm.beginTransaction();

Country copyOfCountry2 = myRealm.copyToRealm(country2);

myRealm.commitTransaction();

5. 书写查询

Realm为创建查询提供了一套非常直观和流式的API。要创建一个查询,使用相关Realm对象的where方法并传入你感兴趣的对象的类。创建完查询之后,你可以使用返回一个RealmResults对象的findAll方法获取所有的结果,findAll。在下面的例子中,我们获取并打印Country的所有对象:RealmResults results1 =

myRealm.where(Country.class).findAll();for(Country c:results1) {    Log.d("results1", c.getName());

}// Prints Norway, Russia

Realm提供了几个命名非常贴切的方法,比如beginsWith, endsWith,lesserThan 和 greaterThan,可以用来过滤,筛选结果。下面的代码演示了如何使用greaterThan方法来获取population(人口)大于1亿的Countryobjects:RealmResults results2 =

myRealm.where(Country.class)

.greaterThan("population", 100000000)

.findAll();// Gets only Russia

如果你想查询结果被归类,你可以使用findAllSorted方法。在它的参数中,用一个String指定被归类field的名字,并用一个boolean指定归类顺序。// Sort by name, in descending orderRealmResults results3 =

myRealm.where(Country.class)

.findAllSorted("name", false);// Gets Russia, Norway

总结

在这篇快速入门中,你学到了如何在安卓项目中使用Realm。可以看到创建一个Realm数据库、存储查询数据是多么的容易。要学习更多t Realm for Android的知识,你可以查阅它的 Java 文档 。

realm android,Realm for Android快速入门教程相关推荐

  1. android 新的布局,Android新布局方式ConstraintLayout快速入门教程

    前言 在android开发中,我们通常是手写布局,很少会用拖动来写布局,虽然constraintlayout在i/o上以拖动来展现了各种功能,我估计在以后开发中,程序员还是习惯手撸代码. 我自己试着拖 ...

  2. 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程

    认识AndEngine什么是AndEngine 随着Android手机.平板的盛行,Android下的游戏也不断的变得火热.而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏.虽说游戏开发的引擎较多 ...

  3. Android 2D游戏引擎AndEngine快速入门教程

    Android 2D游戏引擎AndEngine快速入门教程 介绍:AndEngine是一款知名的Android 2D游戏引擎.该引擎代码开源,并且可以免费使用.本书详细讲解如何使用AndEngine引 ...

  4. 视频教程-Lifecycle组件快速入门教程-Android

    Lifecycle组件快速入门教程 Android研发工程师.南京邮电大学毕业,曾就任于创新工场,现就任于某知名大型移动互联网公司,CSDN博客讲师.<libGDX移动游戏开发从入门到精通> ...

  5. OUYA游戏开发快速入门教程第1章了解OUYA及其设备

    OUYA游戏开发快速入门教程第1章了解OUYA及其设备 OUYA是基于Andorid系统的游戏主机.围绕OUYA游戏机,已经形成一个完整的生态圈.在国外,OUYA已经成为知名的游戏平台.本章会站在玩家 ...

  6. OUYA游戏开发快速入门教程

     OUYA游戏开发快速入门教程 试读地址:http://pan.baidu.com/s/1o63a3W2 本教程是国内唯一OUYA游戏开发教程.本教程基于Unity全面讲解OUYA游戏开发方式.内容包 ...

  7. BeagleBone Black快速入门教程第1章嵌入式Linux之于Maker们

    BeagleBone Black快速入门教程第1章嵌入式Linux之于Maker们 Maker的中文含义类似"创客".创客是指一群酷爱科技.热衷实践的人群,他们以分享技术.交流思想 ...

  8. neon 指令 c语言,Neon指令集优化快速入门教程

    Neon指令集优化快速入门教程 Neon指令集优化快速入门教程 文章目录 1. Neon是什么? 2.Neon为什么速度快 3. Neon基础概念 4. Neon的C语言接口 C语言程序中集成Neon ...

  9. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

最新文章

  1. 转《刘润的数字化家庭》
  2. tomcat设置https访问
  3. 6、ShardingSphere 之 读写分离
  4. Java 9 尝鲜之JShell交互式编程环境
  5. redis映射的概念_Redis基础概念和实现机制的总结
  6. matlab如何保存子图,MATLAB:在子图中绘制/保存网格函数的X-Y视图
  7. 【一分钟论文】轻松解读Semi-supervised Sequence Learning半监督序列学习
  8. 用nginx转发请求tomcat 如何配置访问日志获取真实ip
  9. SDOI2017 相关分析
  10. 抖音去水印最新php方法代码
  11. 【机器学习】逻辑回归 LR 算法 整理
  12. java流浪救助站公益志愿者管理系统
  13. BAT32G137 移植threadX
  14. macbook proa1708_MacBook Pro 2017 A1708自己更换电池
  15. 硬盘分区大学计算机,这是一所大学. 问: 如何对3TB硬盘进行分区?
  16. 使用Phaser开发你的第一个H5游戏(一)
  17. springboot 配置热启动
  18. jdk1.8的安装教程
  19. 计算机中复制和移动的操作系统,如何将旧电脑中的全部文件复制到新电脑中,包括操作系统?...
  20. iOS、mac开源项目及库

热门文章

  1. 【Es】es 配置文件详解
  2. Memcache 客户端
  3. Java中的JsonConfig详解
  4. 【Kafka】Failed to send data to Kafka: Failed to allocate memory within the configured max blocking
  5. 【Flink】Flink WindowOperator大概工作流程
  6. spark学习-Spark算子Transformations和Action使用大全(Transformations章(二))
  7. ListView的性能优化之convertView和viewHolder
  8. Linux版本的ActiveMQ安装过程
  9. matlab进行图片修补,Matlab基于样本的图像修补方法代码的一些问题!
  10. 非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了!