Realm Java 简明教程
Realm 是一个轻量的android版本的数据存储库
Realm 是一个轻量的android版本的数据存储库,快速简洁的操作方式,使得其优势得以凸显,我们来看下一个实例:
// 定义需要存储的类,继承自 RealmObject
public class Dog extends RealmObject {
@Required // Name cannot be null
private String name;
private int age;
// ... Generated getters and setters ...
}
public class Person extends RealmObject {
@Required // Name is not nullable
private String name;
private String imageUrl; // imageUrl is an optional field
private RealmList<Dog> dogs; // A person has many dogs (a relationship)
// ... Generated getters and setters ...
}
// 像一般的操作方式使用它
Dog dog = new Dog();
dog.setName("Rex");
dog.setAge("1");
Log.v(TAG, "Name of the dog: " + dog.getName());
// 获取一个Realm实例
Realm realm = Realm.getInstance(context);
// 查找Dog数据库中字段age小于2的所有数据
RealmResults<Dog> puppies = realm.where(Dog.class).lessThan("age", 2).findAll();
puppies.size(); // => 此时还没有插入存储,因此为0
// 保存这个数据
realm.beginTransaction();
realm.copyToRealm(dog);
realm.commitTransaction();
// 查询是自动同步更新的
puppies.size(); // => 1
//异步查询和更新数据
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
// 开始查询和修改数据
Dog theDog = realm.where(Dog.class).equals("age", 1).findFirst();
theDog.setAge(3);
}
}, new Realm.Transaction.Callback() {
@Override
public void onSuccess() {
// 原始的查询数据会自动更新
puppies.size(); // => 0 because there are no more puppies (less than 2 years old)
dog.getAge(); // => 3 数据已经修改
}
});
我们来看下如上的流程,发现处理过程比起我们之前使用的数据库方案简单了许多。像litepal的操作已经很简单,但是相对来说还是需要配置一些xml和app参数才可以使用。相对来说,Realm则非常轻量,简单易用,有同步和异步处理方案,代码相对也非常优雅。
开始
前期要求
- 我们仅支持android
- Android Studio >= 0.8.6 — 使用Eclipse,往下看.
- 最新的Android SDK版本.
- JDK 版本 >=7.
- 我们支持android2.3以上版本
- 使用
- 你可以选择手动添加或者使用maven工具实现。
Maven
1.请确保您的项目使用jcenter作为一个依赖库 (默认的是最新的android gradle plugin)
2.在你的工程依赖库增加compile ‘io.realm:realm-android:0.87.4’
3.使用工具->Android->同步即可
Jar
1.下载jar包解压
2.新建一个工程
3.复制jar文件夹到app/libs里面
4.在工程的依赖里面加入包含此库。
- 你可以选择手动添加或者使用maven工具实现。
- 混淆要求
Realm 在编译时生成每个RealmObject 的代理类。为了确保这些类可以在混淆和静态分析工具能运行的,你的混淆语法需要如下去编写:
-keep class io.realm.annotations.RealmModule
-keep @io.realm.annotations.RealmModule class *
-keep class io.realm.internal.Keep
-keep @io.realm.internal.Keep class * { *; }
-dontwarn javax.**
-dontwarn io.realm.**
Api查询
你可以在官方地址查看到所有的api使用接口。
具体Models的使用规则,下一章节再来分析。