Realm数据库使用教程(一):Realm配置和Stetho配置


  • 得到Realm对象,打开数据库操作

package tsou.com.simple.realmtest.utils;

import android.content.Context;

import android.content.res.AssetManager;

import android.widget.Toast;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import io.realm.Realm;

import tsou.com.simple.realmtest.MyApplication;

public class UIUtils {

private static Toast toast;

/**

  • 静态吐司

  • @param context

  • @param text

*/

public static void showToast(Context context, String text) {

if (toast == null) {

toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);

}

toast.setText(text);

toast.show();

}

/**

  • 不需要上下文对象的 静态toast

*/

public static void showToast(String text) {

showToast(getContext(), text);

}

/**

  • 获取上下文对象

  • @return

*/

public static Context getContext() {

return MyApplication.getInstance();

}

/**

  • 获得Realm实例

  • @return

*/

public static Realm getRealmInstance() {

return Realm.getInstance(MyApplication.getRealmConfiguration());

}

/**

  • 获取Realm数据库64位秘钥

  • @param key

  • @return

*/

public static byte[] getRealmKey(String key) {

String newKey = “”;

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

newKey = newKey + key;

}

return newKey.getBytes();

}

/**

  • 从asset路径下读取对应文件转String输出

  • @return

*/

public static String getJson(String fileName) {

StringBuilder sb = new StringBuilder();

AssetManager am = getContext().getAssets();

BufferedReader br = null;

try {

br = new BufferedReader(new InputStreamReader(

am.open(fileName)));

String next = “”;

while (null != (next = br.readLine())) {

sb.append(next);

}

} catch (IOException e) {

e.printStackTrace();

sb.delete(0, sb.length());

} finally {

try {

if (br != null) {

br.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return sb.toString().trim();

}

}

在UIUtils工具类中getRealmInstance方法就是获得Realm实例的,其他的方法后期会用到。

  • 构建数据库model

方式一:继承RealmObject

package tsou.com.simple.realmtest.bean;

import java.io.Serializable;

import io.realm.RealmObject;

import io.realm.annotations.Ignore;

import io.realm.annotations.PrimaryKey;

import io.realm.annotations.Required;

/**

  • Created by Administrator on 2017/12/15 0015.

  • 直接继承于RealmObject来声明 Realm 数据模型

  • 注意:如果你创建Model并运行过,然后修改了Model。

  • 那么就需要升级数据库,否则会抛异常。

*/

public class User extends RealmObject {

/**

  • 表示该字段是主键

  • 字段类型必须是字符串(String)或整数(byte,short,int或long)

  • 以及它们的包装类型(Byte,Short, Integer, 或 Long)。不可以存在多个主键,

  • 使用字符串字段作为主键意味着字段被索引(注释@PrimaryKey隐式地设置注释@Index)。

*/

@PrimaryKey

private int id;

/**

  • 表示该字段非空

  • 只能用于Boolean, Byte, Short, Integer, Long, Float, Double, String, byte[] 和 Date。

  • 在其它类型属性上使用 @Required修饰会导致编译失败

  • 注意:基本数据类型不需要使用注解 @Required,因为他们本身就不可为空。

*/

@Required

private String name;

private int age;

/**

  • 表示忽略该字段

  • 被添加@Ignore标签后,存储数据时会忽略该字段。

*/

@Ignore

private String sex;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

}

支持的属性

boolean, byte, short,int,long,float, double,String,

Date 和,byte[], RealmObject,

RealmList< “?” extends RealmObject>

还支持Boolean, Byte, Short, Integer, Long, Float 和 Double

整数类型 short、int 和 long 都被映射到 Realm 内的相同类型(实际上为 long )

方式二:实现 RealmModel接口并添加 @RealmClass修饰符来声明。

package tsou.com.simple.realmtest.bean;

import io.realm.RealmModel;

import io.realm.annotations.PrimaryKey;

import io.realm.annotations.RealmClass;

/**

  • Created by Administrator on 2017/12/15 0015.

  • 通过实现 RealmModel接口并添加 @RealmClass修饰符来声明

  • 注意:如果你创建Model并运行过,然后修改了Model。

  • 那么就需要升级数据库,否则会抛异常。

*/

@RealmClass

public class Student implements RealmModel {

private String name;

private int num;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

}

  • 在Chrome上查看数据库

打开数据库

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mRealm = UIUtils.getRealmInstance();

initView();

}

关闭数据库

Activity中用完记得关闭

@Override

protected void onDestroy() {

super.onDestroy();

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

mRealm.close();

}

}

然后查看数据库,如下图:

这里写图片描述

Stetho的详细配置,请查看:使用Stetho在Chrome上直接调试android应用数据库&Okhttp网络请求

到此Realm配置和Stetho配置基本完成,是否对你有所帮助呢?增删改查请看后续文章。
Realm数据库使用教程(二):增加数据
Demo地址:https://gitee.com/huangxiaoguo/Realm

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助**。

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-VKzoaMZr-1715830726609)]

[外链图片转存中…(img-XXjMCx8H-1715830726610)]

[外链图片转存中…(img-pD8iMATa-1715830726611)]

[外链图片转存中…(img-46mZ0myq-1715830726611)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值