ActiveAndroid не сохраняет таблицу

Я использую библиотеку ActiveAndroid для использования базы данных, но при попытке сохранить объект пишет, что такой таблицы нет. Я пытался обновить версию базы данных и удалить свое приложение, но все равно не повезло. Любая помощь будет оценена. Благодарю вас!

Это ошибка:

11-29 05:16:11.048: E/SQLiteLog(3170): (1) no such table: alarm
11-29 05:16:11.048: E/SQLiteDatabase(3170): Error inserting weekly=1 isOnSnooze=0 tone=Default ringtone (Cesium) thursday=1 monday=1 alarmId=0 hour=0 snoozeTime=0 isEnabled=1 minute=0 wednesday=1 sunday=1 name=Untitled saturday=1 tuesday=1 friday=1
11-29 05:16:11.048: E/SQLiteDatabase(3170): android.database.sqlite.SQLiteException: no such table: alarm (code 1): , while compiling: INSERT INTO alarm(weekly,isOnSnooze,tone,thursday,monday,alarmId,hour,snoozeTime,isEnabled,minute,wednesday,sunday,name,saturday,tuesday,friday) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at com.activeandroid.Model.save(Model.java:153)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at com.martyawesome.smartyalarm.activities.AddAlarmActivity.saveAlarm(AddAlarmActivity.java:254)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at com.martyawesome.smartyalarm.activities.AddAlarmActivity_$1.onClick(AddAlarmActivity_.java:62)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.view.View.performClick(View.java:4438)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.view.View$PerformClick.run(View.java:18422)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.os.Handler.handleCallback(Handler.java:733)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.os.Handler.dispatchMessage(Handler.java:95)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.os.Looper.loop(Looper.java:136)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at android.app.ActivityThread.main(ActivityThread.java:5001)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at java.lang.reflect.Method.invokeNative(Native Method)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at java.lang.reflect.Method.invoke(Method.java:515)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
11-29 05:16:11.048: E/SQLiteDatabase(3170):     at dalvik.system.NativeStart.main(Native Method)
11-29 05:16:11.060: D/dalvikvm(3170): GC_FOR_ALLOC freed 1942K, 33% free 9905K/14608K, paused 4ms, total 4ms
11-29 05:16:11.080: E/MediaPlayer(3170): Should have subtitle controller already set

Вот мои коды:

AlarmModel.java (GenericModel расширяет com.activeandroid.Model; он просто содержит операции CRUD)

package com.martyawesome.smartyalarm.models;

import java.util.List;

import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;
import com.cmai.al.models.GenericModel;

@Table(name = "alarm")
public class AlarmModel extends GenericModel<Object> {

@Column(name = "alarmId")
public int id;

@Column(name = "name")
public String name;

@Column(name = "hour")
public int timeHour;

@Column(name = "minute")
public int timeMinute;

@Column(name = "sunday")
public int sunday;

@Column(name = "monday")
public int monday;

@Column(name = "tuesday")
public int tuesday;

@Column(name = "wednesday")
public int wednesday;

@Column(name = "thursday")
public int thursday;

@Column(name = "friday")
public int friday;

@Column(name = "saturday")
public int saturday;

@Column(name = "weekly")
public int repeatWeekly;

@Column(name = "tone")
public String alarmTone;

@Column(name = "isEnabled")
public int isEnabled;

@Column(name = "isOnSnooze")
public int isOnSnooze;

@Column(name = "snoozeTime")
public int snoozeTime;

public List<AlarmModel> getAll() {
    return super.getAll(getCurrentClass());
}

public void update(AlarmModel model) {
    super.update(getCurrentClass(), model);
}

public void updateAll(List<AlarmModel> models) {
    super.updateAll(getCurrentClass(), models);
}

public void deleteAll() {
    super.deleteAll(getCurrentClass());
}

}

AndroidManifest.xml

...
<application android:name="com.activeandroid.app.Application"
...
<meta-data
    android:name="AA_DB_NAME"
    android:value="smartyalarm.db" />
<meta-data
    android:name="AA_DB_VERSION"
    android:value="2" />
</application>

person Marty Hernandez    schedule 29.11.2014    source источник


Ответы (2)


Я думаю, что ваш класс AlarmModel должен расширять com.activeandroid.Model, но не GenericModel<Object>.

person romtsn    schedule 29.11.2014
comment
Ой, извините, я забыл указать, что GenericModel расширяет com.activeandroid.Model. - person Marty Hernandez; 29.11.2014
comment
Что, если вы измените имя таблицы на @Table(name = Alarms)? - person romtsn; 29.11.2014
comment
Но что, если вы измените расширение на com.activeandroid.Model? Я просто думаю, что библиотека не поддерживает наследование, как вы хотите. И какое имя таблицы у вашего GenericModel<Object>? - person romtsn; 29.11.2014
comment
GenericModel просто содержит методы для получения, обновления и удаления моделей. Моя ошибка в том, что мое приложение почему-то не сохраняет таблицу для моего AlarmModel. - person Marty Hernandez; 29.11.2014
comment
Ваша проблема в том, что ваша таблица не была создана, значит, что-то не так с вашими аннотациями. - person romtsn; 29.11.2014
comment
Я смог исправить свою ошибку! Похоже, моя библиотека ActiveAndroid устарела. Итак, я скачал новейшую версию 3.1, и она исправлена! Тем не менее, спасибо за время за помощь :) - person Marty Hernandez; 29.11.2014
comment
Нп, я просто вижу, что они добавляют поддержку наследования в более новых версиях :) - person romtsn; 29.11.2014

Ваш класс модели должен реализовать Serializable.

person Sagar    schedule 14.01.2017
comment
Хотя это может быть ценным советом для решения проблемы, хороший ответ также демонстрирует решение. Пожалуйста, EDIT, чтобы предоставить пример кода, чтобы показать, что вы имеете в виду. В качестве альтернативы, рассмотрите возможность написания этого в качестве комментария. - person ρяσѕρєя K; 14.01.2017
comment
вы можете поместить это как комментарий. Ответ требует более четкого и почти точного ответа на вопрос. - person Ajith Pandian; 14.01.2017