2014-11-29 6 views
0

Я использую библиотеку 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> 

ответ

0

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

+0

Ow sorry Я забыл включить, что GenericModel расширяет com.activeandroid.Model. –

+0

Что делать, если вы изменили имя таблицы на @Table (name = "Alarms")? – rom4ek

+0

По-прежнему такая же ошибка:/ –

0

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

+0

Хотя это может быть ценным советом для решения проблемы, хороший ответ также демонстрирует решение. Пожалуйста, [EDIT] (http://stackoverflow.com/posts/5419867/edit), чтобы предоставить пример кода, чтобы показать, что вы имеете в виду. В качестве альтернативы, подумайте об этом вместо комментария –

+0

, вы можете поместить это как комментарий. Ответ требует более четкого и точного ответа на вопрос. –

Смежные вопросы