Android - 在特定时间范围内显示SQLite数据库查询

时间:2015-01-09 03:44:31

标签: android sqlite

我正在开发一款应用来跟踪手机使用时间。 问题是,我需要在一天内显示时间使用情况。 例如,我需要从数据库显示我的应用程序仅在上午12点至晚上11点59分使用的时间 并且需要在第二天重置时间。

这是我的代码:

 public void onCreate(SQLiteDatabase db) {
    String CREATE_APPTIME_TABLE = "CREATE TABLE app_time (" +
            "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "packageName TEXT UNIQUE," +
            "appName TEXT," +
            "elapsedTime INTEGER )";

这是检索时间的查询

public List<AppTime> getAllAppTime() {
    List<AppTime> appTimes = new LinkedList<AppTime>();

    // build query
    String query = "SELECT * FROM " + TABLE_APPTIME + " WHERE " + KEY_TIME + " > 0";

    // get reference to writable DB
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(query, null);

我需要每天从早上12点到晚上11点59分显示elapsedTime,并在第二天重置时间。

谢谢。 :)

1 个答案:

答案 0 :(得分:0)

我可以通过两种方式建议

  1. 如果您准备修改app_time表,则可以添加日期列以跟踪当天。在这种情况下,您可以根据日期向用户显示历史记录。您的查询需要有一个日期过滤器,不需要重置数据库。 (您可能仍希望删除早于60天的条目,以保持数据库大小不受限制)
  2. 该表格可以修改如下

    public void onCreate(SQLiteDatabase db) {
        String CREATE_APPTIME_TABLE = "CREATE TABLE app_time (" +
            "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "packageName TEXT UNIQUE," +
            "appName TEXT," +
            "elapsedTime INTEGER, " + 
            "dateCol VARCHAR(50) )";
    

    添加这两种方法

    public static String getCurrentDate() {
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd", Locale.getDefault());
        Calendar cal = Calendar.getInstance();
        return dateFormat.format(cal.getTime());
    }
    
    public static String getDateFor(int date, int month, int year) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd", Locale.getDefault());
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DATE, date);
        cal.set(Calendar.MONTH, month); // month starts from 0
        cal.set(Calendar.YEAR, year);
        return dateFormat.format(cal.getTime());
    }
    

    然后在您查询中,您可以像这样访问特定日期的行

    // build query
    String query = "SELECT * FROM " + TABLE_APPTIME + " WHERE dateCol = '" + getCurrentDate() + "'";
    
    1. 您可以使用AlarmManager在每天凌晨12:00执行,您可以在其中执行服务以重置计时器。 AlarmManager