原标题:RealmforAndroid快速入门教程
介绍如果你关注安卓开发的最新趋势,你可能已经听说过 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:
@PrimaryKey private 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 object Country 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<Country> 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<Country> results2 = myRealm.where(Country.class) .greaterThan("population", 100000000) .findAll(); // Gets only Russia
如果你想查询结果被归类,你可以使用findAllSorted方法。在它的参数中,用一个String指定被归类field的名字,并用一个boolean指定归类顺序。
// Sort by name, in descending order RealmResults<Country> results3 = myRealm.where(Country.class) .findAllSorted("name", false); // Gets Russia, Norway总结
在这篇快速入门中,你学到了如何在安卓项目中使用Realm。可以看到创建一个Realm数据库、存储查询数据是多么的容易。要学习更多t Realm for Android的知识,你可以查阅它的 Java 文档 。
相关:
目标读者:理解HTTP协议,对称和非对称加密,想要了解HTTPS协议的工作原理。读完本文,你能明白什么是HTTPS
源码推荐(12.28B):降低代码耦合快速开发框架,一句代码将图片切成两张
分离代码,降低代码耦合快速开发框架(上传者:不可数的爱)根据https://github.com/Akateason/XTTableDataso
瀑布流(上传者:herodys)网络请求数据,带collectionView头部,上拉加载,下拉刷新QQ界面(上传者:17941160
本文由CocoaChina译者小袋子翻译原文:How to Easily Switch Your App Delegate for Testing如何简单地为测
源码推荐(12.22B):不用写代码的侧滑返回,仿天猫网易新闻导航栏效果
不用写代码的侧滑返回(上传者:19971017_木木)任何代码不用写,只需要继承一个类,即可以侧滑返回!仿天猫,
作者:黄凯背景最近在做一个预告片类的APP,在预告片的编辑模块有一个预告片倒序文件的需求,这个和倒序播放的需求
源码推荐(12.25B):自定义tabBar,自动布局+cell高度自适应
自定义tabBar(上传者:小妞,不要跑)自定义tabBar,集成简单,使用方便自动布局+cell高度自适应(上传者:iOS
示例详解:UIScrollview与Autolayout的那点事
前言自从写了介绍Masonry那篇文章以后 就一直有人对UIScrollView的那个例子不是很理解UIView*container=[UI
源码推荐(12.28):一种navigation渐变色的实现方案,一句话实现无限轮播器
一种navigation渐变色的实现方案,与背景一体(上传者:lc00oo)navigationBar随背景图渐变,不遮挡上层视图。
HR如何快速面试APP产品经理的面试问题: 01、是否准备做背调?如果不准备的话,简历啥的就别看了,经