如何在Android中使用SQLite存储警报?

3

你好,我正在创建一个 Android 闹钟应用程序,需要将闹钟存储在 SQLite 数据库中。但是,我无法在这里存储数据。以下是我的 MainActivity 和数据库活动,请帮助我解决下面给出的最后一个错误。谢谢您提前。

textAlarmPrompt.setText("\n\n***\n" + "Alarm is set@ "+ targetCal.getTime() + "\n" + "Repeat every 5 minutes\n"+ "***\n");
    long hour = targetCal.getTimeInMillis();
    long minute = targetCal.getTimeInMillis();
    Intent i = new Intent(this, DataBaseActivity.class);
    i.putExtra("hour", hour);
    i.putExtra("minute", minute);
    startActivity(i);

and This is my database activity.

public abstract class DataBaseActivity extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "alarmclock";
    private static final String CREATE_TABLE = "alarm";
    private static String id;
    private Long hour;
    private Long minute;
    private static final String KEY_ID = id;
    private static final String KEY_ALARM_HOUR = "hour";
    private static final String KEY_ALARM_MINUTE = "minute";

    public DataBaseActivity(Context context, String name,CursorFactory factory, int version) {
     super(context, name, factory, version);
    // Intent intent = new Intent();
    // intent.getLongExtra("hour", hour);
    // intent.getLongExtra("minute", minute);
    SQLiteDatabase db = this.getWritableDatabase();

    final String CREATE_TABLE_TODO = "CREATE TABLE " + "(" + KEY_ID
    + "INTEGER AUTO INCRIMENT," + KEY_ALARM_HOUR + "TIME,"
    + KEY_ALARM_MINUTE + "TIME" + ")";
    ContentValues values = new ContentValues();
    values.put(KEY_ALARM_HOUR, hour); // Contact Name
    values.put(KEY_ALARM_MINUTE, minute);
    db.insert(CREATE_TABLE, null, values);
    db.close();

    }
    }


and the error i am getting is as follows.
java.lang.RuntimeException: Unable to instantiate activity        ComponentInfo{com.toprecur.alarmactivity/com.toprecur.alarmactivity.DataBaseActivity}: java.lang.InstantiationException: can't instantiate class com.toprecur.alarmactivity.DataBaseActivity
2个回答

3

这是我为存储警报设计的数据库实现的简化版。

public class AlarmsOpenHelper extends SQLiteOpenHelper {

    public static final String TABLE_NAME       = "ALARMS";
    public static final String COLUMN_ID        = "ID";
    public static final String COLUMN_HOUR      = "HOUR";
    public static final String COLUMN_MINUTE    = "MINUTE";
    public static final String COLUMN_DATE      = "DATE";
    public static final String COLUMN_NAME      = "NAME";
    public static final String COLUMN_TONE      = "TONE";
    private static final int DATABASE_VERSION   = 4;
    private static final String DATABASE_NAME   = "alarm_app.db";
    private static final String TABLE_CREATE    =
            "CREATE TABLE " + TABLE_NAME + " (" +
            COLUMN_ID        + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_HOUR      + " TEXT NOT NULL, " +
            COLUMN_MINUTE    + " TEXT NOT NULL, " +
            COLUMN_DATE      + " TEXT, " +
            COLUMN_NAME      + " TEXT, " +
            COLUMN_TONE      + " TEXT);";

    AlarmsOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(TABLE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

}

那么,在您希望与数据库一起使用的活动中:

static AlarmsOpenHelper alarmsOpenHelper;
static SQLiteDatabase db;

你可以像我一样编写一个initDatabase方法。
private void initDatabase() {
    alarmsOpenHelper = new AlarmsOpenHelper(getApplicationContext());
    db = alarmsOpenHelper.getWritableDatabase();
}

从这里开始,您可以随意操作数据库,比如

static void addAlarmToDatabase(String hour, String minute) {
    db.execSQL("INSERT INTO " + AlarmsOpenHelper.TABLE_NAME +
            " (" + AlarmsOpenHelper.COLUMN_HOUR + ", " +
            AlarmsOpenHelper.COLUMN_MINUTE + ") VALUES ('" +
            hour + "', '" + minute + "');");
}

还有一件事是你可以搞乱你的数据库,要重构表格,只需更改数据库版本,例如在这种情况下就是更改

private static final int DATABASE_VERSION   = 3;

to

private static final int DATABASE_VERSION   = 4;

这将调用onUpgrade方法。

阅读一些文档,你会得到提示使用数据库


0
public abstract class DataBaseActivity extends SQLiteOpenHelper
  • 抽象类不能被实例化。这是异常的直接原因。

  • 你的DataBaseActivity不是一个Activity。你不应该在清单文件中将其声明为一个活动,也不应该尝试通过Intent调用它作为一个活动。

通常情况下,你在活动或片段中使用SQLiteOpenHelper类,而不是作为独立的活动。


那么,我需要做什么。请详细说明一下。 - Naseer Ahammed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接