设为首页 加入收藏

TOP

Android之Realm详解(非原创)(三)
2019-08-30 06:18:52 】 浏览:98
Tags:Android Realm 详解 原创
nt : 求结果集的记录数量。
findAll(): 返回结果集所有字段,返回值为RealmResults队列
findAllSorted() : 排序返回结果集所有字段,返回值为RealmResults队列
between(), greaterThan(),lessThan(), greaterThanOrEqualTo() & lessThanOrEqualTo()
equalTo() & notEqualTo()
contains(), beginsWith() & endsWith()
isNull() & isNotNull()
isEmpty()& isNotEmpty()

8. 修改数据

mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { //先查找后得到User对象 User user = mRealm.where(User.class).findFirst(); user.setAge(26); } }); 

修改也是需要在事务中操作。使用查询语句得到数据,然后将内容改了即可。

9. 删除数据

(1)使用deleteFromRealm()

//先查找到数据 final RealmResults<User> userList = mRealm.where(User.class).findAll(); mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { userList.get(0).deleteFromRealm(); } }); 

(2)使用deleteFromRealm(int index)

mRealm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { userList.deleteFromRealm(0); } }); 

(3)其他方法

userList.deleteFirstFromRealm(); //删除user表的第一条数据 userList.deleteLastFromRealm();//删除user表的最后一条数据 results.deleteAllFromRealm();//删除user表的全部数据 

10. 异步任务注意点

最后在销毁Activity或Fragment时,要取消掉异步任务

@Override protected void onDestroy() { super.onDestroy(); if (deleteTask!=null&&!addTask.isCancelled()){ deleteTask.cancel(); } } 

11. 其他常见操作

API:RealmObjectSchema
(1)取消id必填

personSchema.setNullable("id", true): 

(2)移除id字段

personSchema.removeField("id"); 

(3)重命名

personSchema..renameField("id", "userId"); 

API:DynamicRealmObject
(4)获取id

String id = obj.getString("id"); 

(5)为字段设置值

obj.setString("name", "Gavin"); obj.setInt("id", 1); obj.setLong("id", 1); 

12. 数据库版本升级

??当数据结构发生变化是,需要升级数据库。对于Realm来说,数据库升级就是迁移操作,把原来的数据库迁移到新结构的数据库

??例1:User类发生变化,移除age,新增个@Required的id字段。
User版本:version 0

String name;
int age; 

User版本:version 1

@Required
String id; String name; 

创建迁移类CustomMigration,需要实现RealmMigration接口。执行版本升级时的处理:

 /** * 升级数据库 */ class CustomMigration implements RealmMigration { @Override public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { RealmSchema schema = realm.getSchema(); if (oldVersion == 0 && newVersion == 1) { RealmObjectSchema personSchema = schema.get("User"); //新增@Required的id personSchema .addField("id", String.class, FieldAttribute.REQUIRED) .transform(new RealmObjectSchema.Function() { @Override public void apply(DynamicReal mObject obj) { obj.set("id", "1");//为id设置值 } }) .removeField("age");//移除age属性 oldVersion++; } } } 

使用Builder.migration升级数据库,将版本号改为1(原版本号:0)。当Realm发现新旧版本号不一致时,会自动使用该迁移类完成迁移操作。

RealmConfiguration config = new RealmConfiguration.Builder() .name("myrealm.realm") //文件名 .schemaVersion(1) .migration(new CustomMigration())//升级数据库 .build(); 

例2:加入Dog类,User中加入Dog集合。
User版本:version 1

@Required
String id; String name; 

User版本:version 2

@Required private String id; private String name; private RealmList<Dog> dogs; 

Dog类

public class Dog extends RealmObject { private String name; private int age; } 

在迁移类CustomMigration中,继续添加处理方法。

(oldVersion == 1 && newVersion == 2) { //创建Dog表 RealmObjectSchema dogSchema = schema.cre
首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android之崩溃日志管理(原创) 下一篇Android之Lottie动画详解(非原创)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目