今天就来说说Realm在开发中的坑吧,虽然用起来好用,但是还是有很多坑,等着大家往下跳。
第一:配置问题
在工程的build文件中配置如下:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath "io.realm:realm-gradle-plugin:3.3.2"
}
}
在app的build文件中,配置如下:
apply plugin: 'realm-android'
第二、创建和初始化
(1)、使用RealmConfiguration配置Realm
创建数据库时首先需要调用Realm.init()方法,否则系统报错:Java.lang.IllegalStateException: Call Realm.init(Context)
before creating a RealmConfiguration
数据库初始化主要工作是什么数据库的name(设置数据库的文件名称)、schemaVersion(设置当前数据库版本号,当前版本号不能小于历史版本号)、migration(数据库版本迁移)、 deleteRealmIfMigrationNeeded(版本冲突时删除原始数据库)、inMemory(在内存中持久化,关闭后自动删除)、build(创建数据库)。
public static Realm getRealm(Context context)
{
byte[] key = new byte[64];
new SecureRandom().nextBytes(key);
Realm.init(context);
Migration migration = new Migration();
RealmConfiguration config = new RealmConfiguration.Builder()
.name("realmdb.realm") //文件名
.schemaVersion(0) //版本号
.migration(migration)//数据库版本迁移(数据库升级,当数据库中某个表添加字段或者删除字段)
.deleteRealmIfMigrationNeeded()//声明版本冲突时自动删除原数据库(当调用了该方法时,上面的方法将失效)。
.build();//创建
return Realm.getInstance(config);
}
执行该方法后将生成一个文件名为:realmdb.realm的数据库文件。
(2)使用默认配置
Realm.init(this);
Realm mRealm = Realm.getDefaultInstance();
使用默认配置将生成一个名为default.realm数据库文件
note:记得使用完后,在onDestroy中关闭Realm
@Override
protected void onDestroy() {
super.onDestroy();
// Close the Realm instance.
realm.close();
}
第三、创建具体的model
1、支持的数据类型:
boolean, byte, short, int, long, float, double, String, Date and byte[]
在Realm中byte, short, int, long最终都被映射成long类型
2、注解说明
@PrimaryKey
①字段必须是String、 integer、byte、short、 int、long 以及它们的封装类Byte, Short, Integer, and Long
②使用了该注解之后可以使用copyToRealmOrUpdate()方法,通过主键查询它的对象,如果查询到了,则更新它,否则新建一个对象来代替。
③使用了该注解将默认设置(@index)注解
④使用了该注解之后,创建和更新数据将会慢一点,查询数据会快一点。
@Required
数据不能为null
@Ignore
忽略,即该字段不被存储到本地
@Index
为这个字段添加一个搜索引擎,这将使插入数据变慢、数据增大,但是查询会变快。建议在需要优化读取性能的情况下使用。
第四、相关的操作
具体的操作代码这里就不写,网上一大堆,给大家推荐一篇吧
如连接:创建Model,增删改查的相关操作
http://www.jianshu.com/p/37af717761cc
第五、遇到的问题
创建好的model,作为数据库的表,写入数据库之后,这时候你查出来的数据,如果要对查出的数据做修改,必须重新复制一份,在对复制的这一份处理之后,更新数据库,因为你查出来的数据,数据是没办法修改的,
看看这个链接:
http://blog.youkuaiyun.com/qq_21430549/article/details/53148208
这个链接相信对大家有所帮助的,
通过这篇文章,希望大家少走一些弯路。