Статьи

И работает с Realm для Android

Если вы следили за последними тенденциями в разработке для Android, вы, вероятно, слышали о Realm . Realm — это легкая база данных, которая может заменить библиотеки SQLite и ORM в ваших проектах Android.

По сравнению с SQLite Realm работает быстрее и обладает множеством современных функций, таких как поддержка JSON, свободный API, уведомления об изменениях данных и поддержка шифрования, которые облегчают жизнь разработчикам Android.

В этом кратком совете вы узнаете основы Realm для Android. В этом уроке я буду использовать Realm v0.84.1 .

Чтобы использовать Realm в проекте Android, вам необходимо добавить его в качестве зависимости compile в файл build.gradle модуля приложения .

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

Область похожа на базу данных SQLite. С ним связан файл, который после создания будет сохранен в файловой системе Android.

Чтобы создать новое Realm, вы можете вызвать статический метод Realm.getInstance из любого Activity .

java Realm myRealm = Realm.getInstance(context);

Обратите внимание, что вызов Realm.getInstance без передачи ему RealmConfiguration приводит к созданию файла Realm с именем default.realm .

Если вы хотите добавить другую область в свое приложение, вы должны использовать объект RealmConfiguration.Builder и дать файлу области уникальное имя.

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

Любой JavaBean может храниться в Realm, если он расширяет класс RealmObject . Если вам интересно, что такое JavaBean, это просто Java-класс, который сериализуем, имеет конструктор по умолчанию и имеет методы getter / setter для своих переменных-членов. Например, экземпляры следующего класса могут быть легко сохранены в области:

« `открытый класс java Country extends RealmObject {

} « `

Если вы хотите использовать переменную-член RealmObject в качестве первичного ключа, вы можете использовать аннотацию @PrimaryKey . Например, вот как вы бы добавили первичный ключ с именем code в класс Country :

« `java @PrimaryKey частный строковый код;

public String getCode () {код возврата; }

public void setCode (String code) {this.code = code; } « `

Хотя чтение данных из области очень просто, как вы увидите на следующем шаге, запись данных в нее немного сложнее. Realm совместим с ACID, и для обеспечения атомарности и согласованности Realm заставляет вас выполнять все операции записи внутри транзакции.

Чтобы начать новую транзакцию, используйте метод beginTransaction . Аналогично, чтобы завершить транзакцию, используйте метод commitTransaction .

Вот как вы можете создать и сохранить экземпляр класса Country :

« `java myRealm.beginTransaction ();

myRealm.commitTransaction (); « `

Возможно, вы заметили, что country1 не был создан с помощью конструктора класса Country . Чтобы Realm управлял экземпляром RealmObject , экземпляр должен быть создан с createObject метода createObject .

Если вы должны использовать конструктор, не забудьте использовать метод copyToRealm соответствующего объекта Realm прежде чем совершать транзакцию. Вот пример:

« `java // Создать объект Country country2 = new Country (); country2.setName ( «Россия»); country2.setPopulation (146430430); country2.setCode ( «RU»);

myRealm.beginTransaction (); Страна copyOfCountry2 = myRealm.copyToRealm (country2); myRealm.commitTransaction (); « `

Realm предлагает очень интуитивно понятный и удобный API для создания запросов. Чтобы создать запрос, используйте метод where соответствующего объекта Realm и передайте класс интересующих вас объектов. После создания запроса вы можете получить все результаты, используя метод RealmResults , который возвращает объект RealmResults . В следующем примере мы выбираем и распечатываем все объекты типа Country :

« `java RealmResults results1 = myRealm.where (Country.class) .findAll ();

for (Страна c: результаты1) {Log.d («результаты1», c.getName ()); }

// Принты Норвегия, Россия « `

Realm предлагает несколько точно названных методов, таких как beginsWith , endsWith , lesserThan и greaterThan , которые можно использовать для фильтрации результатов. Следующий код показывает, как вы можете использовать метод greaterThan для выборки только тех объектов Country , population которых превышает 100 миллионов:

« `java RealmResults results2 = myRealm.where (Country.class) .greaterThan («Population», 100000000) .findAll ();

// Получает только Россию « `

Если вы хотите, чтобы результаты запроса были отсортированы, вы можете использовать метод findAllSorted . В качестве аргументов он принимает String указывающую имя поля для сортировки, и boolean определяющее порядок сортировки.

« `java // Сортировка по имени в порядке убывания RealmResults results3 = myRealm.where (Country.class) .findAllSorted («name», false);

// Получаем Россию, Норвегия « `

В этом кратком совете вы узнали, как использовать Realm в проекте Android. Вы видели, как легко создать базу данных Realm, хранить в ней данные и запрашивать ее. Чтобы узнать больше о Realm для Android, вы можете ознакомиться с его документацией по Java .