Realm数据库使用教程(二),android开发常用的设计模式

本文详细介绍了如何在Android中使用Realm数据库进行数据操作,包括同步和异步方式的增删改查,以及如何处理JSON数据。涉及的API有executeTransaction、copyToRealm、copyToRealmOrUpdate、executeTransactionAsync等,还有事务监听和异常处理,是Android开发中的重要参考资料。
摘要由CSDN通过智能技术生成
  • 同步操作:增加一对多表,Person包含多个Men(以executeTransaction为例)

MorePerson类在文章最下方提供

mRealm.executeTransaction(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

MorePerson morePerson = realm.createObject(MorePerson.class);

morePerson.setCity(“杭州”);

morePerson.setProject(“开发工程师”);

morePerson.setTime(simpleDateFormat.format(new Date()));

for (int i = 0; i < 3; i++) {

Men men = realm.createObject(Men.class);

men.setName(“huangxiaoguo” + i);

men.setAge(new Random().nextInt(100));

morePerson.getMens().add(men);

}

}

});

注意:在Realm中不能使用android原有的list集合,需要Realm特定的RealmList集合!

这里写图片描述

这里写图片描述

  • 同步操作:增加一对多表,Person包含多个Men(以copyToRealm为例)

final MorePerson morePerson1 = new MorePerson();

morePerson1.setCity(“杭州”);

morePerson1.setProject(“开发工程师”);

morePerson1.setTime(simpleDateFormat.format(new Date()));

RealmList menList = new RealmList<>();

for (int i = 0; i < 3; i++) {

Men men2 = new Men();

men2.setName(“huangxiaoguo” + i);

men2.setAge(new Random().nextInt(100));

menList.add(men2);

}

morePerson1.setMens(menList);

for (int i = 0; i < 3; i++) {

Men men2 = new Men();

men2.setName(“huangxiaoguo” + i);

men2.setAge(new Random().nextInt(100));

morePerson1.getMens().add(men2);

}

mRealm.executeTransaction(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

realm.copyToRealm(morePerson1);

}

});

这里写图片描述

这里写图片描述

  • 同步操作:beginTransaction和commitTransaction方法插入数据(不建议使用)

//注意:在UI和后台线程同时开启创建write的事务,可能会导致ANR错误。

// 为了避免该问题,可以使用executeTransactionAsync来实现。

mRealm.beginTransaction();//开启事务

Student student1 = mRealm.createObject(Student.class);

student1.setName(“事务方式插入数据”);

student1.setNum(new Random().nextInt(100) + 100);

mRealm.commitTransaction();

这里写图片描述

异步操作(建议使用)


  • 异步操作:使用executeTransactionAsync直接插入数据

//该方法会开启一个子线程来执行事务,并且在执行完成后进行结果通知。

realmAsyncTask = mRealm.executeTransactionAsync(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

Student student2 = realm.createObject(Student.class);

student2.setName(“使用executeTransactionAsync直接插入数据”);

student2.setNum(new Random().nextInt(100) + 200);

}

});

异步操作需要在activity不可见或关闭时取消任务

@Override

protected void onDestroy() {

super.onDestroy();

if (realmAsyncTask != null && !realmAsyncTask.isCancelled()) {

realmAsyncTask.cancel();

}

if (mRealm != null && !mRealm.isClosed()) {

mRealm.close();

}

}

这里写图片描述

  • 异步操作:使用executeTransactionAsync并且进行监听

//注意:如果当Acitivity或Fragment被销毁时,在OnSuccess或OnError中执行UI操作,

// 将导致程序奔溃 。用RealmAsyncTask .cancel();可以取消事务

//在onStop或onDestroy中调用,避免crash

realmAsyncTask = mRealm.executeTransactionAsync(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

Student student2 = realm.createObject(Student.class);

student2.setName(“使用executeTransactionAsync监听”);

student2.setNum(new Random().nextInt(100) + 300);

}

}, new Realm.Transaction.OnSuccess() {

@Override

public void onSuccess

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值