杭州Android培训
达内杭州Android培训中心

18357109557

热门课程

达内:Realm for Android轻松入门

  • 时间:2015-12-29
  • 发布:杭州android中心
  • 来源:码农网


    如果你关注Android开发趋势,那么肯定要知道Realm,Realm是一个可以替代SQLite以及ORMlibraries的轻量级数据库。

    相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些为安卓工程师提升了开发效率。

    杭州达内Android培训专家将全面讲解Android版Realm的基础知识,帮你轻松入门。

    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数据库、存储查询数据。



原文链接:http://www.codeceo.com/article/realm-for-android-learn.html

上一篇:达内:最好的一些开源 Android 应用
下一篇:达内:Android开发的常见问题及解决方案

恭喜达内获得《产学合作协同育人项目合作伙伴奖》

迷茫小伙参加达内网络营销培训,获8w年薪入职哈道盟

中传学子参加达内Java培训,转身成为Java工程师月薪12.5K

职场求突破参加达内网络营销培训,获10万年薪成为营销达人

选择城市和中心
贵州省

广西省

海南省