2013-02-23 2 views
2

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

приложения Android: имя = "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. Что еще я должен сделать, чтобы создать другие поля?

+0

Я в замешательстве: я добавил тестовый класс с простым свойством String. Я создал экземпляр и назвал _save_. Это бросило исключение: ** нет такой таблицы: Тест ** Я полагал, модель делает базовую систему ее созданной. Можете ли вы сказать мне, как работает ActiveAndroid? Разве нет возможности создания таблицы? – Nestor

ответ

8

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

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

+0

Спасибо за ответ. Но когда я пытаюсь это сделать, я получаю следующее исключение. Любая идея почему? 'android.database.sqlite.SQLiteException: не ошибка (код 0)' – hannanessay

+1

Не знаю, но если у вас есть исходный код, вы можете отлаживать, где было создано исключение. Я также предлагаю написать в трекер проблемы проекта: https://github.com/pardom/ActiveAndroid/issues – Nestor

+0

Ошибка была выбрана из моего класса приложений, где я инициализировал свой ActiveAndroid. Спасибо за помощь, я открою вопрос в github. – hannanessay

10

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

+1

согласитесь, это важный материал. – rmirabelle

+2

Вы должны отредактировать этот учебник (https://github.com/pardom/ActiveAndroid/wiki/Getting-started) с вашим комментарием в ответе, чтобы другие люди не столкнулись с той же проблемой. – iwasrobbed

+0

Принять этот ответ/ –

1

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

+0

Проверьте принятый ответ. Это рекомендуемое решение. – Nestor