关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »Realm for Android快速入门教程

    Realm for Android快速入门教程

    2015-12-28 00:00:00 出处:segmentfault
    分享

    介绍

    假如你关注安卓开发的最新趋势,你可能已经听说过 Realm 。Realm是一个可以替代SQLite以及ORMlibraries的轻量级数据库。

    相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。

    在这篇快速入门教程中,你将学到Android版Realm的基础知识。本教程我们使用的是Realm v0.84.1。

    1. 添加Realm到工程

    要在安卓工程中使用Realm,你需要在module的build.gradle文件中添加一个添加一个依赖:

    compile 'io.realm:realm-android:0.84.1'

    2. 创建一个Realm

    一个Realm相当于一个SQLite数据库。它有一个与之对应的文件,一旦创建将持久保存在安卓的文件系统中。

    要创建一个新的Realm,你可以在任意Activity中调用静态方法Realm.getInstance。

    Realm myRealm = Realm.getInstance(context);

    注意,调用Realm.getInstance,而没有传入RealmConfiguration,会创建一个叫做?default.realm的Realm文件。

    假如你想向app中添加另一个Realm,必须使用一个RealmConfiguration.Builder对象,并为?Realm file?指定一个独有的名字。

    Realm myOtherRealm =
            Realm.getInstance(
                    new RealmConfiguration.Builder(context)
                            .name("myOtherRealm.realm")
                            .build()
    );

    3. 创建一个RealmObject

    只要继承了RealmObject类,任意JavaBean都能存储在Realm中。不知道JavaBean是什么?它就是一个可序列化的java类,有默认构造器,成员变量有相应的getter/setter方法。比如,下面这个类的实例就能轻松的存储在一个Realm中:

    public class Country extends RealmObject {
    
        private String name;
        private int population;
    
        public Country() { }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getPopulation() {
            return population;
        }
    
        public void setPopulation(int population) {
            this.population = population;
        }
    
    }

    假如你想让RealmObject的一个成员变量作为主键,你可以使用@PrimaryKey注解。比如,这里演示了如何为Country类添加一个主键code:

    @PrimaryKey
    private String code;
    
    public String getCode() {
        return code;
    }
    
    public void setCode(String code) {
        this.code = code;
    }

    4. 创建transaction

    虽然从一个Realm读取数据非常简单(下一节有讲),但是向它写入数据就稍微复杂一点。Realm遵循 ACID (数据库事务正确执行的四个基本要素的缩写)规范,为了确保原子性和一致性,它强制所有的写入操作都在一个事务中执行。

    要开始一个新的事务,使用beginTransaction方法。类似地,要结束这个事务,使用commitTransaction方法。

    注:事务即英文里面的transaction。

    这里演示了如何创建和保存一个Country类的实例:

    myRealm.beginTransaction();
    
        // Create an object
        Country country1 = myRealm.createObject(Country.class); 
    
        // Set its fields
        country1.setName("Norway");
        country1.setPopulation(5165800);
        country1.setCode("NO");
    
    myRealm.commitTransaction();

    你可能注意到了country1并不是用Country类的构造器创建的。对于一个Realm来说,管理一个RealmObject的实例,这个实例必须用createObject方法创建。

    假如你必须使用构造器,别忘了在提交事务前使用相关Realm对象的copyToRealm方法。这里是示例:

    // Create the object
    Country country2 = new Country();
    country2.setName("Russia");
    country2.setPopulation(146430430);
    country2.setCode("RU");
    
    myRealm.beginTransaction();
        Country copyOfCountry2 = myRealm.copyToRealm(country2);
    myRealm.commitTransaction();

    5. 书写查询

    Realm为创建查询提供了一套非常直观和流式的API。要创建一个查询,使用相关Realm对象的where方法并传入你感兴趣的对象的类。创建完查询之后,你可以使用返回一个RealmResults对象的findAll方法获取所有的结果,findAll。在下面的例子中,我们获取并打印Country的所有对象:

    RealmResults<Country> results1 =
            myRealm.where(Country.class).findAll();
    
    for(Country c:results1) {
        Log.d("results1", c.getName());
    }
    
    // Prints Norway, Russia

    Realm提供了几个命名非常贴切的方法,比如beginsWith,?endsWith,lesserThan?和?greaterThan,可以用来过滤,筛选结果。下面的代码演示了如何使用greaterThan方法来获取population(人口)大于1亿的Countryobjects:

    RealmResults<Country> results2 =
            myRealm.where(Country.class)
                    .greaterThan("population", 100000000)
                    .findAll();
    
    // Gets only Russia

    假如你想查询结果被归类,你可以使用findAllSorted方法。在它的参数中,用一个String指定被归类field的名字,并用一个boolean指定归类顺序。

    // Sort by name, in descending order
    RealmResults<Country> results3 =
            myRealm.where(Country.class)
                    .findAllSorted("name", false);
    
    // Gets Russia, Norway

    总结

    在这篇快速入门中,你学到了如何在安卓项目中使用Realm。可以看到创建一个Realm数据库、存储查询数据是多么的容易。要学习更多t Realm for Android的知识,你可以查阅它的 Java 文档 。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    电脑屏幕不小心竖起来了?别慌,快捷键搞定

    Destoon 模板存放规则及语法参考

    Destoon系统常量与变量

    Destoon系统目录文件结构说明

    Destoon 系统安装指南

    Destoon会员公司主页模板风格添加方法

    Destoon 二次开发入门

    Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

    Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

    Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

    IT头条

    Synology 更新 ActiveProtect Manager 1.1 以增强企业网络弹性和合规性

    00:43

    新的 Rubrik Agent Cloud 加速了可信的企业 AI 代理部署

    00:34

    宇树科技 G1人形机器人,拉动一辆重达1.4吨的汽车

    00:21

    Cloudera 调查发现,96% 的企业已将 AI 集成到核心业务流程中,这表明 AI 已从竞争优势转变为强制性实践

    02:05

    投资者反对马斯克 1 万亿美元薪酬方案,要求重组特斯拉董事会

    01:18

    技术热点

    大型网站的 HTTPS 实践(三):基于协议和配置的优化

    ubuntu下右键菜单添加新建word、excel文档等快捷方式

    Sublime Text 简明教程

    用户定义SQL Server函数的描述

    怎么在windows 7开始菜单中添加下载选项?

    SQL Server 2016将有哪些功能改进?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。