设为首页 加入收藏

TOP

Android之Realm详解(非原创)(一)
2019-08-30 06:18:52 】 浏览:94
Tags:Android Realm 详解 原创

文章大纲

一、Realm介绍
二、Realm实战
三、Realm官方文档
四、项目源码下载
五、参考文章

 

一、Realm介绍

1. 什么是Realm

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

2. Realm优势

易用
??Ream 不是在SQLite基础上的ORM,它有自己的数据查询引擎。并且十分容易使用。
快速
??由于它是完全重新开始开发的数据库实现,所以它比任何的ORM速度都快很多,甚至比SLite速度都要快。
跨平台
??Realm 支持 iOS & OS X (Objective?C & Swift) & Android。我们可以在这些平台上共享Realm数据库文件,并且上层逻辑可以不用任何改动的情况下实现移植。
高级
??Ream支持加密,格式化查询,易于移植,支持JSON,流式api,数据变更通知等高级特性
可视化
??Realm 还提供了一个轻量级的数据库查看工具,在Mac Appstore 可以下载“Realm Browser”这个工具,开发者可以查看数据库当中的内容,执行简单的插入和删除数据的操作。(windows上还不清楚)

3. 使用要求

(1)目前不支持Android以外的Java
(2)Android Studio >= 1.5.1(不支持Eclipse)
(3)JDK version >=7.
(4)支持API 9(Android 2.3)以及之后的版本

二、Realm实战

1. 添加依赖

在project的build中加入依赖

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

在module中加入

apply plugin: 'realm-android' 
 

2. 创建model

??创建一个User类,需要继承RealmObject。支持public, protected和 private的类以及方法

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来声明 Realm 数据模型之外,还可以通过实现 RealmModel接口并添加 @RealmClass修饰符来声明。

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

支持的属性
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 )
(1)@PrimaryKey——表示该字段是主键
??使用过数据库的同学应该看出来了,PrimaryKey就是主键。使用@PrimaryKey来标注,字段类型必须是字符串(String)或整数(byte,short,int或long)以及它们的包装类型(Byte,Short, Integer, 或 Long)。不可以存在多个主键,使用字符串字段作为主键意味着字段被索引(注释@PrimaryKey隐式地设置注释@Index)。

@PrimaryKey private String id; 

(2)@Required——表示该字段非空
??在某些情况下,有一些属性是不能为null的。使用@Required可用于用于强行要求其属性不能为空,只能用于Boolean, Byte, Short, Integer, Long, Float, Double, String, byte[] 和 Date。在其它类型属性上使用。

(3)@Required修饰会导致编译失败。
??提示:基本数据类型不需要使用注解 @Required,因为他们本身就不可为空。

@Required private String name; 

(4)@Ignore——表示忽略该字段
??被添加@Ignore标签后,存储数据时会忽略该字段。

@Ignore private String name; 

(5)@Index——添加搜索索引
??为字段添加搜索索引,这样会使得插入的速度变慢,数据量也变得更大。不过在查询速度将变得更快,建议只在优化读取性能的特定情况时添加索引。支持索引:String,byte,short,int,long,boolean和Date字段。

注意:如果你创建Model并运行过,然后修改了Model。那么就需要升级数据库,否则会抛异常。升级方式后面会提到

3. 初始化Realm

重写Application类

public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); } } 

AndroidManifest.xml中配置MyApp

 

创建方式1

public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); Realm.init(this);//初始化realm Realm mRealm = Realm.getDefaultInstance(); } } 

??这时候会创建一个叫做 default.realm的Realm文件,一般来说,这个文件位于/data/data/包名/files/。通过realm.getPath()来获得该Realm的绝对路径。

创建方式2

public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); Realm.init(this);//初始化realm //这时候会创建一个叫做 default.realm的Realm文件,一般来说, // 这个文件位于/data/data/包名/files/。通过realm.getPath()来获得该Realm的绝对路径 RealmConfigu
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android之崩溃日志管理(原创) 下一篇Android之Lottie动画详解(非原创)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目