Введение После некоторого перерыва в разработке моего приложения под Андроид , в ходе которого в моей голове формировались все новые и новые идеи, как сделать его красивее и удобнее, в конце января я снова сел за его разработку.
За время моих размышлений подход к созданию приложения немного трансформировался, и поэтому до объектной модели я добрался только три недели назад. И почти сразу я столкнулся с необходимостью улучшения УКАОрм .
Кому интересно узнавать не только о тех инновациях, которые уже внедрены, но и о том, что еще находится в разработке -
Изменения и дополнения
Первое, с чем я столкнулся, это необходимость Поставщик услуг 'е и в Курсор ’е.С Поставщик услуг ’ом особых проблем не было - аннотация Ормконтентпровидер унаследовано от Поставщик услуг ’a и на данный момент реализует два метода: запрос , получение ОрмГде и возвращение ОрмКурсор , И обновлять , который получает экземпляр, подлежащий обновлению.
ОрмКурсор унаследован от АннотацияКурсор и, помимо реализации всех необходимых методов, он также реализует метод getEntities - возвращение Список объекты.
Наиболее интересной с точки зрения реализации является функция getColumnNames , который возвращает массив имен столбцов (функция getOrmFields уже переделано) и приватная функция ПолучитьОбъект , возвращая значение указанного столбца.
Эти классы значительно упростили разработку учетной записи синхронизации.
Вторым нововведением стала поддержка новых типов полей: логическое значение И целочисленный массив .
Если с логическое значение все более-менее понятно, дальше примерно множество Я скажу вам немного больше.
Сначала пришла идея создать дополнительную таблицу под названием « имя класса_имя поля » и один столбец типа компонента массива.
Однако после некоторого размышления я пришел к выводу, что массив с классом, унаследованным от ОрмEntity , разрушает всю архитектуру, и разработчику все равно придется сериализовать любой другой непримитивный тип вручную.
Поэтому я решил, что Орм будет поддерживать только массивы примитивных типов, которые идеально сериализуются в строку, а также прекрасно десериализуются обратно.
Проблемы, возможно, могут возникнуть с двойной , формат строки которого может содержать запятую, которая является разделителем элементов массива, но их легко решить, жестко установив локаль на Английский .
Кроме того, я наконец-то дошел до реализации метода getDefaultValues в наследнике ОрмХелпер 'А.
Теперь это выглядит так:
соответственно, добавив значения по умолчанию для нашей любимой модели из второй части будут реализованы следующим образом:@Override public void getDefaultValues(Class<? extends OrmEntity> entityClass, List<OrmEntity> valueList) { }
public void getDefaultValues(Class<? extends OrmEntity> entityClass, List<OrmEntity> valueList) {
if (entityClass.equals(CarType.class)) {
valueList.add(new CarType("Passenger"));
valueList.add(new CarType("Truck"));
}
}
Ну вот мы и подошли к самой вкусной проблеме, о которой я говорил.
Хардекс Также в первый статья - обновление схемы данных.
Обновление схемы данных
Опять же, давайте вернемся к нашей модели и посмотрим на сущность Машина : @Table(rightJoinTo = {Truck.class})
public class Car extends BaseEntity {
@Column(name = "car_type")
private CarType type;
@Column
private List<Wheel> wheels;
@Column(name = "engine_power")
private int enginePower;
@Column(name = "doors_count")
private int doorsCount;
}
Допустим, мы решили добавить еще одно поле:
@Column(name = "max_speed")
private int maxSpeed;
В этом случае нам нужно изменить версию базы данных в манифесте:
<meta-data android:name="UO_DB_VERSION" android:value="2" />
И напишите код в методе помощник по обновлению 'А:
@Override
protected void onUpgrade(int oldVersion, int newVersion) {
Теги: #Android #orm #ucaorm #java orm #собственный проект #Собственный опыт #Разработка под Android #SQLite
-
Действия По Устранению Сбоя Компьютера
19 Oct, 24 -
Диофант
19 Oct, 24 -
Го 1.5 Выпущен
19 Oct, 24 -
Ctocast #1: Кирилл Сафонов (Rutarget)
19 Oct, 24 -
Система Мониторинга В Bash
19 Oct, 24