Realm for Android 使用入门

Realm Android 轻量级数据库使用教程 android realm 轻量级本地数据库操作 阅读详情

       Realm 是一个手机数据库,是用来替代 SQlite 的解决方案,比 SQlite 更轻量级,速度更快,因为它有一套自己的数据库搜索引擎,并且还具有很多现代数据库的优点,支持 JSON,流式 API 调用,数据变更通知,自动数据同步,简单身份验证,访问控制,事件处理,最重要的是跨平台,目前已经支持 Java、Swift、Object - C、React - Native 等多种实现,今天我们就来简单的入门 Ream 数据库的使用


GitHub 地址:Realm GitHub 地址

官方文档地址:官方文档地址


一、使用要求


首先使用 Realm 的一些使用要求我们还是需要先来了解

  • Android Studio 的使用版本必须在 1.5.1 或更高
  • 使用 JDK 7 或更高版本
  • Android API 9 或更高(即 Android 2.3 及以上)
  • Realm 不在 Android 支持 Java,不支持 Eclipse 作为 IDE,如果使用请转到 Android Studio

上面基本就是我们要注意的事项,大家了解即可


二、环境配置


在了解 Realm 在 Andorid 中的基本使用要求之后,接下来我们来看看,如何在 Android Studio 中来引入 Realm

1)首先在工程的根目录(工程目录) build.gradle 中引入如下代码,注意是工程的 build.gradle 而不是 app 的 build.gradle


buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "io.realm:realm-gradle-plugin:3.7.0"
    }


可以看到 Realm 是作为一个插件来安装的


添加位置如下图:




2)在 app 的 build.gradle 中添加如下代码


apply plugin: 'realm-android'

添加位置如下图:




       当上面的这两步做好以后,可以刷新我们的 Gradle 依赖,如果你是通过 v 0.88 以前的版本来更新,你需要去清理一下你的 Gradle 项目(./gradlew clean),来移除之前的安装,另外对 Maven 和 Ant 并不支持


三、官方推荐的例子


introExample:包括了简单的例子,让你知道如何去使用当前的 API

gridViewExample:一个简单的 APP,来展示怎么通过 Realm 来支持 GridView 的存储,同时它还呈现了如何构建一个 JSON 的数据库(通过 GSON)

thread Example :简单展示如何在多线程中使用 Realm

adapterExample:如何通过使用 RealmBaseAdapter 和 RealmRecyclerViewAdapter 来使 Realm 以优雅的方式作用于 ListView 和 RecyclerView

jsonExample:如何使用一种新的 Realm JSON 工具

encryptionExample:如何使用加密 Realms

rxJavaExample:如何搭配 RxJava 来使用 Realm

UnitTestExample:教你在使用 Realm 时如何编写单元测试


四、初始化 Realm


1)在 Applaction 的 onCreate() 方法中使用 Realm.init() 初始化


public class MyApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    Realm.init(this);
  }
}

2)在 Applaction 的 onCreate() 方法中对 Realm 进行相关的配置


1. 使用默认配置:


        Realm.init(this);
        Realm mRealm = Realm.getDefaultInstance();


或者如下:


public class MyApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    // The default Realm file is "default.realm" in Context.getFilesDir();
    // we'll change it to "myrealm.realm"
    Realm.init(this);
    RealmConfiguration config = new RealmConfiguration.Builder().name("myrealm.realm").build();
    Realm.setDefaultConfiguration(config);
  }
}

使用默认配置会创建一个 default.realm 的 Realm 文件,一般来说这个文件位于 data/data/包名/files 目录下,通过 realm.getPath 来获得该 Realm 的绝对路径


2. 使用自定义配置:


RealmConfiguration config = new RealmConfiguration.Builder() 
            .name("myrealm.realm") //文件名
            .schemaVersion(0) //版本号
            .build();
Realm realm = Realm.getInstance(config);

3. 创建非持久化的 realm,也就是保存在内存中,应用关闭后就清除


RealmConfiguration myConfig = new RealmConfiguration.Builder(context) 
            .name("myrealm.realm")//保存在内中
            .inMemory()
            .build();

RealmConfiguration 支持的方法:

Builder.name:指定数据库的名称,如果不指定默认为 default

Builder.schemaVersion:指定数据库的版本号

Builder.encryptionkey:指定数据库的秘钥

Builder.migration:指定迁移操作的迁移类

Builder.deleteRealmIfMigrationNeeded:声明版本冲突时自动删除原数据库

Builder.inMemory:声明数据库只在内存中持久化

build:完成配置构建


如果你像以上一样创建了自己的 Application,并初始化 Realm,那么你需要在 Andorid.manifest.xml 中进行如下配置:


<application
  android:name=".MyApplication"
  ...
/>

3)在 Activity 中具体的使用:


public class MyActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Realm realm = Realm.getDefaultInstance(); // opens "myrealm.realm"
    try {
      // ... Do something ...
    } finally {
      realm.close();
    }
  }
}

或者使用完后在 onDestory() 方法中进行关闭:


@Override 
protected void onDestroy() { 
    super.onDestroy();
    // Close the Realm instance. 
    realm.close(); 
}


四、创建实体


创建一个 User 类,继承 RealmObject


public class User extends RealmObject {
    private String name;
    private int age;

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

这里除了通过继承 RealmObject 来声明数据模型外,还可以通过实现 RealmModel 接口,并添加 @RealmClass 修饰符来声明:

@RealmClass
public class User implements RealmModel {
    ...
}

多对多的关系:


public class User extends RealmObject {
    public String name;
    public RealmList<Email> emails;
}

public class Email extends RealmObject {
    public String address;
    public boolean active;
}


支持的属性:

boolean、byte、short、int、long、float、double、String、Date、byte[]、RealmObject、RealmList<? extends RealmObject>,还支持 Boolean、Byte、Short、Integer、Long、Float 和 Double


@primarykey:表示该字段是主键,一般使用过数据库的同学可能知道,primarykey 就是主键,使用 @primarykey 来标注字段类型必须是字符串(String)或整数(byte、short、int、long)以及它们的包装类型(Byte、Short、Integer、Long),还需要注意的是不可以使用多个主键


@PrimaryKey
private String id;

@Required:表示该字段非空

在某些情况下,有些字段是不能为 null 的,使用 @Required 属性可以强行要求其属性不能为 null,只能用于 Boolean、Byte、Short、Integer、Long、Float、Double、String、byte[] 和 Date,在其他类型属性上使用 @Required 会导致编译失败

@Required
private String name;

@Ignore: 表示忽略该字段,添加 @Ignore 标签后,存储数据时会忽略该字段


@Ignore
private String name;

@Index:添加搜索索引,为字段添加 @Index 标签,插入速度变慢,查询速度变快,支持索引 String、byte、short、int、long、boolean 和 Date字段


五、增


1) 实现方法一:事务操作


类型一:新建一个对象进行存储


mRealm.beginTransaction();
User user = mRealm.createObject(User.class); // Create a new object
user.setName("John");
user.setEmail("john@corporation.com");
mRealm.commitTransaction();


类型二:复制一个对象到数据库


User user = new User("John");
user.setEmail("john@corporation.com");

// Copy the object to Realm. Any further changes must happen on realmUser
mRealm.beginTransaction();
mRealm.copyToRealm(user);
mRealm.commitTransaction();


2) 实现方法二:使用事务块


Realm  mRealm=Realm.getDefaultInstance();

final User user = new User("John");
user.setEmail("john@corporation.com");

mRealm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(Realm realm) {
            
            realm.copyToRealm(user);
               
            }
        });


六、删


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表的全部数据

七、改


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


八、查


查询的操作相对来说比较多,下面我们来一一介绍


1) findAll:查询所有,如查询所有 User


RealmResults<User> userList = mRealm.where(User.class).findAll();

2) findFirst:查询第一条数据,示例如下


User user2 = mRealm.where(User.class).findFirst();


3) equalTo:根据条件查询,例得到命名为  qdj 的列表


RealmResults<User> userList = mRealm.where(User.class)
         .equalTo("name", "qdj").findAll();

还有很多其他的方法如下:

sum():对指定字段求和

average():对指定字段求平均值

min():对指定字段求最小值

max():对指定字段求最大值

findAll():返回结果集所有字段

findAllSorted():排序返回结果集所有字段等等方法,还有很多,这里不再一一列举,用到时大家可以去官网查询相关的 API


今天就写到这里,有错误请指正



【Python计量】linearmodels面板数据回归(一) 我们以伍德里奇《计量经济学导论现代方法》的”第14章高级面板数据方法“的案例14.1为例,使用jtrain中的数据来进行固定效应估计。 阅读详情

相关推荐

dxf-viewer 查看器

dxf-viewer SDK 的示例,它是一个基于 Three.js 和 Vue3 构建的基于 WebGL 的 BIM 模型查看器。它用于查看 DWG/DXF/PDF 文件。面积测量 - 角度测量 -标记。

qq_25547755的博客 866

Android 数据库Realm入门

之前使用本地数据库都是用sqllite的,偶尔用一下LitePal,听人说Realm多么多么好使,但是我一直都没有去学习,今天有空去瞅了瞅,果然很不错。 它有以下几种特点: 1.易用:Ream 不是在SQLite基础上的ORM,它有自己的数据查询引擎。并且十分容易使用。 2.快速:由于它是完全重新开始开发的数据库实现,所以它比任何的ORM速度都快很多,甚至比SLite速度都要快。 3.跨平台:...

流月的博客 1160

MicroLogix1400编程(使用RSLogix 500 + RSLinx Classic Lite)

MicroLogix1400编程

noscallion的博客 1万+

Android Realm数据库使用

也就是说,Realm实例在线程中,如果没有Looper,是不能收到更新通知的,list.add(new TestUser(2,"adidass", "110119", 28, "云南德克萨斯州", "海员", "男"));list.add(new TestUser(0,"android", "123123", 20, "河南常德", "传菜员", "女"));list.add(new TestUser(4,"hibrid", "120250", 26, "赣州", "贼", "男"));

Dream It Possible 2180

yakit 验证码识别 进行webfuzzer

在渗透测试的过程中,我们可能需要对管理员密码进行枚举,或者密码喷洒的时候,遇到验证码就很烦。有没有自动化识别验证码的办法呢?有的,兄弟,有的。验证码的识别率很低,captcha-killer-modified对算术验证码识别正确率非常低,还会识别成乱七八糟的结果,这就非常麻烦。因为你不知道到底是验证码不对,还是密码不对。这是 ddddocr 识别率的问题,如果师傅们找到准确度更高的工具,完全可以替换上去。

Arkmornings的博客 1666

Android13 AudioFlinger混音流程全解析:从prepareTracks_l到threadLoop_write的底层实现

本文深入解析Android13 AudioFlinger混音流程,从prepareTracks_l到threadLoop_write的底层实现。详细剖析MixerThread的核心工作循环,包括音轨预处理、混音算法执行及硬件写入机制,帮助开发者优化音频性能并处理多音轨场景。

tea88的博客 1130

Realm for Android Studio 3.0+的环境配置解析

开发Android App的小伙伴们,在选择数据库框架的时候,Realm是必须了解的,它一个可以替代SQLite以及ORMlibraries的轻量级数据库,至于它的详细用法网上皆是,这里就不赘述了,注意说下笔者遇到的问题吧第一个问题:Realm在Android Studio 3 下配置报错配置官方文档:https://realm.io/docs/java/latest/,里面详细介绍了配置过程,如...

群鸿 2542

VGG16

VGG16学习笔记

一去不复返的通信er 1177

Realm使用教程

Realm JAVA 2.2.2使用教程Realm官方网站 : https://realm.io/docs/java/latest/#getting-started Android Studio 配置Step 1: build.gradle(全局)buildscript { repositories { jcenter() } dependencies

柒加伊的专栏 1311

uniapp(全端兼容)-最新详细实现接入腾讯云IM即时通讯教程,uniapp在安卓苹果app端/小程序/h5移动端等集成使用腾讯云im插件,提供消息列表与聊天对话示例,支持发图片/私聊/实时监听消息

uni-app,腾讯云IM,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,im即时通讯,腾讯云IM详细教程,如何接入腾讯IM即时通讯,使用腾讯im有没有插件,怎么使用腾讯云IM插件,tim-wx-sdk,聊天sdk,即时通讯im uniapp私聊/群聊/聊天室,实现IM即时通讯仿微信聊天功能,对接腾讯云IM+音视频,调用腾讯即时通信IM的示例,卡顿很卡不流畅,音视频,全局监听,仿微信IM,uni-huanxin-im,sdk,实现多端实时通

✅ 精选推荐文章 1万+

智慧园区——解读零碳智慧园区全域双碳管理建设方案【附全文阅读】

《零碳智慧园区全域双碳管理建设方案》为园区开发运营企业、政府部门及绿色能源服务商等提供系统性指导。方案基于"背景-理念-路径"框架,首先分析全球双碳趋势及我国园区高碳排放现状,明确零碳园区价值;其次提出"数字+绿色"双动力理念,构建数字底座与绿色能源体系;最后详细规划实施路径,包括碳排查、绿能规划、能效优化、碳交易等全流程管理,结合数字孪生技术实现可视化管控,助力园区实现碳中和目标。

cdfunlove的博客 206

Realm for Android快速入门教程

Realm for Android快速入门教程 时间 2015-12-26 16:39:15  泡在网上的日子 原文  http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1226/3807.html 主题 数据库 安卓开发 英文原文: Up and Running With Realm for Andr

u013592116的博客 359

Open3D (C++) 点云边界提取【2025最新版】

Compute the boundary points of a point cloud.The implementation is inspired by the PCL implementation. Reference:https://pointclouds.org/documentation/classpcl_1_1_boundary_estimation.html

点云侠的博客 871

realm android,Realm for Android快速入门教程

介绍如果你关注安卓开发的最新趋势,你可能已经听说过Realm。Realm是一个可以替代SQLite以及ORMlibraries的轻量级数据库。相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。在这篇快速入门教程中,你将学到Android版Realm的基础知识。本教程我们使用的是Realm v0.84...

weixin_39862097的博客 220

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Realm for Android 快速入门

Realm for Android快速入门教程 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! 英文原文:Up and Running With Realm for Android  介绍 如果你关注安卓开发的最新趋势,你可能已经听

jazy_神话的博客 439

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Realm For Android入门教程

Realm For Android入门教程各位看客老爷们,很久没更新文章了;最近项目中的数据库那里写的我的确有点恶心了,所以开始看看各种数据库框架,我查了下网上对各种数据库框架的对比分析哈;但是我一眼就看上了你(realm) 可以跨平台,可以轻松的使用json数据,这简直对我来说是神器啊,我都懒得处理数据了,暂时先写个demo,入门吧,来考验下这个,我看网上说了有很多坑,我先踩踩坑~1、Realm简

BLOG 624

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Realm Java

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30273931的博客 289
上一篇: Android 强大的滚动控件 RecyclerView
下一篇: Android 使用 Multidex 解决 65536 方法数越界问题
QDJdeveloper
博客等级 码龄11年 108粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值