关闭 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 文档 。

    上一篇返回首页 下一篇

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

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    SQL汉字转换为拼音的函数

    windows 7系统无法运行Photoshop CS3的解决方法

    巧用MySQL加密函数对Web网站敏感数据进行保护

    MySQL基础知识简介

    Windows7和WinXP下如何实现不输密码自动登录系统的设置方法介绍

    windows 7系统ip地址冲突怎么办?windows 7系统IP地址冲突问题的

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

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