介绍
如果你关注安卓开发的最新趋势,你可能已经听说过Realm了。 Realm是一个轻量级数据库,可以代替SQLite和ORMlibraries。
Realm比SQLite更快,并且具有许多现代数据库的特性,包括JSON支持、流api、数据更改通知和加密支持。 这些对安卓开发者来说很方便。
在本快速入门教程中,您将学习Android自述的基础知识。 本教程使用Realm v0.84.1。
1 .将自述添加到项目
要在安卓工程中使用Realm,必须将名为compile ' io.realm 3360 realm-Android 33600.84.1 '的依赖关系添加到module的build.gradle文件中
创建自述
Realm相当于SQLite数据库。 有相应的文件,一旦创建,就会永久保存在Android的文件系统中。
要创建新的Realm,可以在任何Activity中调用静态方法Realm.getInstance。 realm my realm=realm.getinstance (context;
请注意,如果在不传递RealmConfiguration的情况下调用Realm.getInstance,则会创建名为default.Realm的realm文件。
如果要向APP中添加其他Realm,则必须使用RealmConfiguration.Builder对象并为Realm文件指定唯一的名称。 RealmmyOtherRealm=
realm.getinstance (newrealmconfiguration.builder )上下文) )。
. name(myotherrealm.realm ) )
. build () )
);
创建自述对象
只要继承了RealmObject类,就可以将任何JavaBean存储在Realm中。 你不知道JavaBean是什么吗? 这是一个可序列化的java类,具有缺省构造函数,成员变量具有相应的getter/setter方法。 例如,以下类的实例可以轻松保存在一个Realm中: publicclasscountryextendsrealmobject { privatestring name; 私有输入价值; 公共计数{ }公共字符串getname { } { return name;
}publicvoidsetname(stringname ) {this.name=name;
}publicintgetPopulation () {returnpopulation;
} publicvoidsetpopulation (int population ) {this.population=population;
}
}
如果希望RealmObject的成员变量是主键,可以使用@PrimaryKey注释。 例如,此示例说明如何将主键code:@ primarykeyprivatestringcode添加到Country类。 公共字符串代码() {返回代码;
}publicvoidsetcode(stringcode ) {this.code=code;
}
创建传递
从一个Realm读取数据非常简单,但将在下一节中介绍。 但是,把数据写入那个有点复杂。 Realm符合ACID (四个基本元素的缩写,数据库事务可以成功执行)规范,强制所有写入都在一个事务中执行,以确保原子性和一致性。
要开始新事务,请使用beginTransaction方法。 同样,要结束此事务,请使用commitTransaction方法。
注:事务为英语翻译。
本文档说明如何创建并保存Country类的实例。 myRealm.beginTransaction (;
//Createanobject
country country1=my realm.createobject (country.class;
//Setitsfields
country1.setname('norway );
country1.setpopulation(5165800;
country1.setcode('no );
myRealm.commitTransaction (;
您可能已经注意到,Country1不是使用country类的构造函数创建的。 对于Realm,它管理必须使用createObject方法创建的RealmObject的实例。
如果需要使用构造函数,请记住在提交事务之前使用相关Realm对象的copyToRealm方法。 这里是一个例子。 //createtheobjectcountrycountry2=new country (;
country2.setname(Russia );
country2. set population (146430430;
country2.setcode('ru );
myRealm.beginTransaction (;
countrycopyofcountry2=my realm.copy to realm (country 2;
myRealm.commitTransaction (;
5 .写查询
Realm为创建查询提供了一组非常直观、流式的API。 要创建查询,请使用相关Realm对象的where方法,并将其传递给感兴趣的对象的类。 创建查询后,可以使用返回RealmResults对象的findAll方法检索所有结果。 下面的示例获取并打印Country中的所有对象: RealmResultsresults1=
myrealm.where(country.class ).findAll ); for(countryc:results1) log.d )、c.getName );
}//PrintsNorway,Russia
Realm提供了几种合适的命名方法,包括beginsWith、endsWith、lesserThan和greaterThan,并可用于过滤和过滤结果。 以下代码说明如何使用greaterThan方法获取population (人口)超过一亿的countryobjects。 realmresultsresults2=
myrealm.where(country.class ) )。
. greaterthan(population ),100000000 ) )。
. findAll (; //GetsonlyRussia
如果要对查询结果进行分类,可以使用findAllSorted方法。 参数用String指定分类字段的名称,用boolean指定分类顺序。 //Sortbyname,indescendingorderrealmresultsresults3=
myrealm.where(country.class ) )。
. findallsorted('name ',false ); //GetsRussia,Norway
总结
在本快速入门中,您学习了如何在Android项目中使用Realm。 您将看到创建Realm数据库和保存查询数据是多么容易。 要了解更多关于t Realm for Android的信息,请参阅Java文档。