ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Realm数据库使用教程(二),android工程师面试题目

2021-12-28 15:58:00  阅读:176  来源: 互联网

标签:教程 Realm String void new android realm public


这里写图片描述

这里写图片描述

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

final Person person1 = new Person();

person1.setCity(“杭州”);

person1.setProject(“android”);

Men men1 = new Men();

men1.setName(“huangxiaoguo”);

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

person1.setMen(men1);

mRealm.executeTransaction(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

//如果使用copyToRealmOrUpdate,Person需要主键

realm.copyToRealm(person1);

}

});

这里写图片描述

这里写图片描述

  • 同步操作:增加一对多表,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() {

UIUtils.showToast(“添加成功”);

}

}, new Realm.Transaction.OnError() {

@Override

public void one rror(Throwable error) {

UIUtils.showToast(“添加失败”);

}

});

这里写图片描述

将Json字符串转化为对象


  • 将Json字符串转化为对象(使用Json字符串插入数据)

模拟网络数据

{

“reason”: “SUCCESSED!”,

“result”: [

{

“dapandata”: {},

“data”: {

“buyFive”: “113700”,

“buyFivePri”: “8.42”,

“buyFour”: “87200”,

“buyThreePri”: “8.35”,

“buyTwoPri”: “8.36”,

“competitivePri”: “8.37”,

“date”: “2012-12-11”,

“gid”: “sh601009”,

“increase”: “43.99”,

“name”: “南京银行”,

“nowPri”: “8.37”,

“reservePri”: “8.38”,

“sellFive”: “214535”,

“time”: “15:03:06”,

“todayMax”: “8.55”,

“traAmount”: “290889560”,

“traNumber”: “34501453”,

“yestodEndPri”: “8.26”

},

“gopicture”: {

“dayurl”: “http://image.sinajs.cn/newchart/daily/n/sh601009.gif”,

“minurl”: “http://image.sinajs.cn/newchart/min/n/sh601009.gif”,

“monthurl”: “http://image.sinajs.cn/newchart/monthly/n/sh601009.gif”,

“weekurl”: “http://image.sinajs.cn/newchart/weekly/n/sh601009.gif”

}

}

],

“resultcode”: “200”

}

创建数据库Model

package tsou.com.simple.realmtest.bean;

import io.realm.RealmObject;

/**

  • Created by Administrator on 2017/12/18 0018.

  • Realm 解析 JSON 时遵循如下规则:

  • 使用包含空值(null)的 JSON 创建对象:

  • 对于非必须(可为空值的属性),设置其值为 null;

  • 对于必须(不可为空值的属性),抛出异常;

  • 使用包含空值(null)的 JSON 更新对象:

  • 对于非必须(可为空值的属性),设置其值为 null;

  • 对于必须(不可为空值的属性),抛出异常;

  • 使用不包含对应属性的 JSON: * 该属性保持不变

*/

public class Stock extends RealmObject {

/**

  • buyFive : 113700

  • buyFivePri : 8.42

  • buyFour : 87200

  • buyThreePri : 8.35

  • buyTwoPri : 8.36

  • competitivePri : 8.37

  • date : 2012-12-11

  • gid : sh601009

  • increase : 43.99

  • name : 南京银行

  • nowPri : 8.37

  • reservePri : 8.38

  • sellFive : 214535

  • time : 15:03:06

  • todayMax : 8.55

  • traAmount : 290889560

  • traNumber : 34501453

  • yestodEndPri : 8.26

*/

private String buyFi

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

ve;

private String buyFivePri;

private String buyFour;

private String buyThreePri;

private String buyTwoPri;

private String competitivePri;

private String date;

private String gid;

private String increase;

private String name;

private String nowPri;

private String reservePri;

private String sellFive;

private String time;

private String todayMax;

private String traAmount;

private String traNumber;

private String yestodEndPri;

public String getBuyFive() {

return buyFive;

}

public void setBuyFive(String buyFive) {

this.buyFive = buyFive;

}

public String getBuyFivePri() {

return buyFivePri;

}

public void setBuyFivePri(String buyFivePri) {

this.buyFivePri = buyFivePri;

}

public String getBuyFour() {

return buyFour;

}

public void setBuyFour(String buyFour) {

this.buyFour = buyFour;

}

public String getBuyThreePri() {

return buyThreePri;

}

public void setBuyThreePri(String buyThreePri) {

this.buyThreePri = buyThreePri;

}

public String getBuyTwoPri() {

return buyTwoPri;

}

public void setBuyTwoPri(String buyTwoPri) {

this.buyTwoPri = buyTwoPri;

}

public String getCompetitivePri() {

return competitivePri;

}

public void setCompetitivePri(String competitivePri) {

this.competitivePri = competitivePri;

}

public String getDate() {

return date;

}

public void setDate(String date) {

this.date = date;

}

public String getGid() {

return gid;

}

public void setGid(String gid) {

this.gid = gid;

}

public String getIncrease() {

return increase;

}

public void setIncrease(String increase) {

this.increase = increase;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getNowPri() {

return nowPri;

}

public void setNowPri(String nowPri) {

this.nowPri = nowPri;

}

public String getReservePri() {

return reservePri;

}

public void setReservePri(String reservePri) {

this.reservePri = reservePri;

}

public String getSellFive() {

return sellFive;

}

public void setSellFive(String sellFive) {

this.sellFive = sellFive;

}

public String getTime() {

return time;

}

public void setTime(String time) {

this.time = time;

}

public String getTodayMax() {

return todayMax;

}

public void setTodayMax(String todayMax) {

this.todayMax = todayMax;

}

public String getTraAmount() {

return traAmount;

}

public void setTraAmount(String traAmount) {

this.traAmount = traAmount;

}

public String getTraNumber() {

return traNumber;

}

public void setTraNumber(String traNumber) {

this.traNumber = traNumber;

}

public String getYestodEndPri() {

return yestodEndPri;

}

public void setYestodEndPri(String yestodEndPri) {

this.yestodEndPri = yestodEndPri;

}

}

解析并插入数据库

mRealm.executeTransaction(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

String stockJson = UIUtils.getJson(“Stock”);

try {

JSONObject js = new JSONObject(stockJson);

String result = js.optString(“result”);

JSONArray jsonArray = new JSONArray(result);

String resultOne = jsonArray.optString(0);

JSONObject js2 = new JSONObject(resultOne);

String data = js2.optString(“data”);

realm.createObjectFromJson(Stock.class, data);

} catch (JSONException e) {

e.printStackTrace();

}

}

});

这里写图片描述

好了,到这里增添数据的方法基本上都介绍完了,如果数据多的话建议使用异步!其他功能请看下文!

Realm数据库使用教程(三):查询数据

Demo地址:https://gitee.com/huangxiaoguo/Realm


这里提供整个activity代码以供参考:

package tsou.com.simple.realmtest;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ListView;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Random;

import io.realm.Realm;

import io.realm.RealmAsyncTask;

import io.realm.RealmList;

import tsou.com.simple.realmtest.adapter.MyAdapter;

import tsou.com.simple.realmtest.bean.Men;

import tsou.com.simple.realmtest.bean.MorePerson;

import tsou.com.simple.realmtest.bean.Person;

import tsou.com.simple.realmtest.bean.Stock;

import tsou.com.simple.realmtest.bean.Student;

import tsou.com.simple.realmtest.bean.User;

import tsou.com.simple.realmtest.utils.UIUtils;

public class AddActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

private ListView mListview;

private List titles = new ArrayList<>();

private Realm mRealm;

private SimpleDateFormat simpleDateFormat;

private RealmAsyncTask realmAsyncTask;

@Override

protected void onDestroy() {

super.onDestroy();

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

realmAsyncTask.cancel();

}

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

mRealm.close();

}

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_add);

mRealm = UIUtils.getRealmInstance();

simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);

initData();

initView();

initListener();

}

private void initData() {

//同步操作**********

//注意:如果在UI线程中插入过多的数据,可能会导致主线程拥塞。

titles.add(“同步操作:使用executeTransaction方法插入数据”);

titles.add(“同步操作:使用copyToRealmOrUpdate方法插入数据”);

titles.add(“同步操作:使用copyToRealm方法插入数据”);

titles.add(“同步操作:增加一对一表,Person包含Men(以executeTransaction为例)”);

titles.add(“同步操作:增加一对一表,Person包含一个Men(以copyToRealm为例)”);

titles.add(“同步操作:增加一对多表,Person包含多个Men(以executeTransaction为例)”);

titles.add(“同步操作:增加一对多表,Person包含多个Men(以copyToRealm为例)”);

titles.add(“同步操作:beginTransaction和commitTransaction方法插入数据”);

//异步操作**********

titles.add(“异步操作:使用executeTransactionAsync直接插入数据”);

titles.add(“异步操作:使用executeTransactionAsync并且进行监听”);

//******将Json字符串转化为对象

titles.add(“将Json字符串转化为对象(使用Json字符串插入数据)”);

}

private void initView() {

mListview = (ListView) findViewById(R.id.listview);

mListview.setAdapter(new MyAdapter(this, titles));

}

private void initListener() {

mListview.setOnItemClickListener(this);

}

@Override

public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

switch (position) {

default:

break;

case 0://同步操作:使用executeTransaction方法插入数据

mRealm.executeTransaction(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

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

student.setName(“使用executeTransaction方法插入数据”);

student.setNum(new Random().nextInt(20));

}

});

break;

case 1://同步操作:使用copyToRealmOrUpdate方法插入数据

/**

  • 当Model中存在主键的时候,推荐使用copyToRealmOrUpdate方法插入数据。

  • 如果对象存在,就更新该对象;反之,它会创建一个新的对象。

*/

final User user = new User();

user.setId(2);

user.setName(“使用copyToRealmOrUpdate方法插入数据”);

user.setAge(new Random().nextInt(20));

user.setSex(“同步”);

mRealm.executeTransaction(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

realm.copyToRealmOrUpdate(user);

}

});

break;

case 2://同步操作:使用copyToRealm方法插入数据

/**

*若该Model没有主键,使用copyToRealm方法,否则将抛出异常。

*/

final Student student = new Student();

student.setName(“使用copyToRealm方法插入数据”);

student.setNum(new Random().nextInt(20));

mRealm.executeTransaction(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

realm.copyToRealm(student);

}

});

break;

case 3://同步操作:增加一对一表,Person包含Men(以executeTransaction为例)

//以executeTransaction为例

mRealm.executeTransaction(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

Person person = realm.createObject(Person.class);

person.setCity(“杭州”);

person.setProject(“android”);

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

men.setName(“huangxiaoguo”);

men.setAge(25);

person.setMen(men);

}

});

break;

case 4://同步操作:增加一对一表,Person包含Men(以copyToRealm为例)

final Person person1 = new Person();

person1.setCity(“杭州”);

person1.setProject(“android”);

Men men1 = new Men();

men1.setName(“huangxiaoguo”);

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

person1.setMen(men1);

mRealm.executeTransaction(new Realm.Transaction() {

@Override

public void execute(Realm realm) {

//如果使用copyToRealmOrUpdate,Person需要主键

realm.copyToRealm(person1);

}

});

break;

case 5://同步操作:增加一对多表,Person包含多个Men(以executeTransaction为例)

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);

}

}

});

break;

case 6://同步操作:增加一对多表,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);

}

});

break;

case 7://同步操作:beginTransaction和commitTransaction方法插入数据

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

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

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

标签:教程,Realm,String,void,new,android,realm,public
来源: https://blog.csdn.net/m0_65512713/article/details/122195413

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有