ActiveAndroid - поля не создаются

Я просто пытался использовать ActiveAndroid. Следуя их руководству из здесь, я все настроил. Я добавил запись манифеста:

приложение android:name="com.activeandroid.app.Application" ...

meta-data android:name="AA_DB_NAME" android:value="MyDb.db"
meta-data android:name="AA_DB_VERSION" android:value="1"

и создал класс моей модели:

package com.mycomp.Model;

import org.joda.time.LocalDate;
import org.odata4j.core.Guid;

import com.activeandroid.Model;
import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;

@Table(name = "Table1")
public class Table1 extends Model
{
  @Column(name = "Custom_ID")
  public Guid Custom_ID;
  @Column(name = "Name")
  public String Name;
  @Column(name = "Usr_type")
  public int Usr_type;
  @Column(name = "BDate")
  public LocalDate BDate;

  public MyEnum UserGroup;

  public Table1()
  {
    super();
  }

  public Table1(String name, LocalDate date, Guid custom_id,
      MyEnum userGroup)
  {
    super();
    Name = name;
    BDate = date;
    Custom_ID = custom_id;
    UserGroup = userGroup;
  }

}

После этого я использовал метод сохранения (он якобы создает базовую структуру базы данных):

Table1 t1=new Table1();
t1.Name="Test";
t1.UserGroup = MyEnum.G1;
t1.save();

Возникло исключение: в таблице Table1 нет столбца с именем Name.

Я проверил это с помощью браузера SQLite. Таблица существует, но содержит только одно поле: Id. Что еще я должен сделать, чтобы создать другие поля?


person Nestor    schedule 23.02.2013    source источник
comment
Я запутался: я добавил класс Test с простым свойством String. Я создал экземпляр и вызвал save. Он выдал исключение: нет такой таблицы: тест Я полагал, что модель заставляет базовую систему создавать ее. Не могли бы вы рассказать мне, как работает ActiveAndroid? Функция создания таблицы отсутствует?   -  person Nestor    schedule 24.02.2013


Ответы (3)


Что ж, я считаю, что должно быть важным сообщить в своем руководстве, что ActiveAndroid создает структуру базы данных при первом запуске. Если вы измените свою модель, она не синхронизируется. Решение: удалите файл db с вашего телефона/эмулятора, и при следующем запуске он заработает.

person Nestor    schedule 24.02.2013
comment
согласен, это важная вещь - person rmirabelle; 07.03.2013
comment
Вам следует отредактировать это руководство (github.com/pardom/ActiveAndroid/wiki/Getting-started) с вашим комментарием в ответе, чтобы другие люди не столкнулись с той же проблемой. - person iwasrobbed; 22.05.2013
comment
Я считаю, что принятый ответ является рекомендуемым способом. Это решение является своего рода обходным путем. - person Nestor; 26.08.2014

Есть еще одно решение: измените значение метаданных AA_DB_VERSION и поместите скрипты модификации в папку assets/migrations, чтобы ActiveAndroid использовал функцию обновления. Это удобно, когда в базе данных уже есть данные.

Источник: https://github.com/pardom/ActiveAndroid/wiki/Schema-migrations

person Nestor    schedule 27.06.2013
comment
Спасибо за ответ. Но когда я пытаюсь это сделать, я получаю следующее исключение. Есть идеи, почему? android.database.sqlite.SQLiteException: not an error (code 0) - person Hannan Shaik; 28.04.2014
comment
Понятия не имею, но если у вас есть исходный код, вы можете отладить, где возникло исключение. Также предлагаю написать в баг-трекер проекта: github.com/pardom/ActiveAndroid/issues - person Nestor; 28.04.2014
comment
Ошибка была вызвана из моего класса приложений, где я инициализировал свой ActiveAndroid. Спасибо за помощь, я открою вопрос на github. - person Hannan Shaik; 28.04.2014
comment
У меня три версии в плей маркете. 1-я версия не имеет столбца в таблице. 2-я версия имеет столбец, в то время как пользователи пытаются обновить до третьей версии, сценарии миграции читают, чтобы добавить дублирующийся столбец для пользователя версии 2, поэтому происходит сбой, как я могу это решить - person George Thomas; 17.07.2015
comment
Сценарии миграции должны содержать только изменения между версиями. Таким образом, если сценарий № 2 добавляет столбец, сценарий № 3 не должен его добавлять. - person Nestor; 17.07.2015

Возможно, вы внесли изменения в класс после создания базы данных, поэтому activeandroid не распознает столбец таблицы. Вы можете либо удалить apk, либо очистить кешированные данные для приложения.

person user2240193    schedule 17.02.2014
comment
Проверьте принятый ответ. Это рекомендуемое решение. - person Nestor; 18.02.2014