Вступление
Если вы следили за последними тенденциями в разработке для Android, вы, вероятно, слышали о Realm . Realm — это легкая база данных, которая может заменить библиотеки SQLite и ORM в ваших проектах Android.
По сравнению с SQLite Realm работает быстрее и обладает множеством современных функций, таких как поддержка JSON, свободный API, уведомления об изменениях данных и поддержка шифрования, которые облегчают жизнь разработчикам Android.
В этом кратком совете вы узнаете основы Realm для Android. В этом уроке я буду использовать Realm v0.84.1 .
1. Добавление области в проект
Чтобы использовать Realm в проекте Android, вам необходимо добавить его в качестве зависимости compile
в файл build.gradle модуля приложения .
groovy compile 'io.realm:realm-android:0.84.1'
2. Создание Царства
Область похожа на базу данных 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() );
3. Создание RealmObject
Любой JavaBean может храниться в Realm, если он расширяет класс RealmObject
. Если вам интересно, что такое JavaBean, это просто Java-класс, который сериализуем, имеет конструктор по умолчанию и имеет методы getter / setter для своих переменных-членов. Например, экземпляры следующего класса могут быть легко сохранены в области:
« `открытый класс java Country extends RealmObject {
личное строковое имя; частное международное население; общедоступная страна () {} public String getName () { вернуть имя; } public void setName (String name) { this.name = имя; } public int getPopulation () { возвращение населения; } public void setPopulation (int население) { this.population = населения; }
} « `
Если вы хотите использовать переменную-член RealmObject
в качестве первичного ключа, вы можете использовать аннотацию @PrimaryKey
. Например, вот как вы бы добавили первичный ключ с именем code в класс Country
:
« `java @PrimaryKey частный строковый код;
public String getCode () {код возврата; }
public void setCode (String code) {this.code = code; } « `
4. Создание транзакций
Хотя чтение данных из области очень просто, как вы увидите на следующем шаге, запись данных в нее немного сложнее. Realm совместим с ACID, и для обеспечения атомарности и согласованности Realm заставляет вас выполнять все операции записи внутри транзакции.
Чтобы начать новую транзакцию, используйте метод beginTransaction
. Аналогично, чтобы завершить транзакцию, используйте метод commitTransaction
.
Вот как вы можете создать и сохранить экземпляр класса Country
:
« `java myRealm.beginTransaction ();
// Создать объект Country country1 = myRealm.createObject (Country.class); // Устанавливаем его поля country1.setName ( "Норвегия"); country1.setPopulation (5165800); country1.setCode ( "НЕТ");
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 (); « `
5. Написание запросов
Realm предлагает очень интуитивно понятный и удобный API для создания запросов. Чтобы создать запрос, используйте метод where
соответствующего объекта Realm
и передайте класс интересующих вас объектов. После создания запроса вы можете получить все результаты, используя метод RealmResults
, который возвращает объект RealmResults
. В следующем примере мы выбираем и распечатываем все объекты типа Country
:
« `java RealmResults
for (Страна c: результаты1) {Log.d («результаты1», c.getName ()); }
// Принты Норвегия, Россия « `
Realm предлагает несколько точно названных методов, таких как beginsWith
, endsWith
, lesserThan
и greaterThan
, которые можно использовать для фильтрации результатов. Следующий код показывает, как вы можете использовать метод greaterThan
для выборки только тех объектов Country
, population
которых превышает 100 миллионов:
« `java RealmResults
// Получает только Россию « `
Если вы хотите, чтобы результаты запроса были отсортированы, вы можете использовать метод findAllSorted
. В качестве аргументов он принимает String
указывающую имя поля для сортировки, и boolean
определяющее порядок сортировки.
« `java // Сортировка по имени в порядке убывания RealmResults
// Получаем Россию, Норвегия « `
Вывод
В этом кратком совете вы узнали, как использовать Realm в проекте Android. Вы видели, как легко создать базу данных Realm, хранить в ней данные и запрашивать ее. Чтобы узнать больше о Realm для Android, вы можете ознакомиться с его документацией по Java .