Android - 显示特定时间范围内的 SQLite 数据库查询
Android - Display SQLite database query in a specific timeframe
我正在开发一个应用程序来跟踪 phone 使用时间。
问题是,我需要在一天内显示时间使用情况。
例如,我需要从数据库中显示我的应用程序仅从 12.00 am - 11.59 pm 使用的时间
并且需要在第二天重新设置时间。
这是我的代码:
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.00 a.m 到晚上 11.59 的 elapsedTime,并在第二天重置时间。
谢谢。 :)
我有两种建议
- 如果您准备好修改 app_time table,您可以添加一个日期列来记录这一天。在这种情况下,您可以向用户显示基于日期的历史记录。您的查询将需要有一个日期过滤器,并且不需要重置数据库。 (您可能仍想删除超过 60 天的条目,只是为了将数据库大小控制在限制范围内)
table可以修改如下
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() + "'";
- 您可以使用每天在 12:00AM 执行的 AlarmManager,您可以在其中执行服务以重置计时器。 AlarmManager
我正在开发一个应用程序来跟踪 phone 使用时间。 问题是,我需要在一天内显示时间使用情况。 例如,我需要从数据库中显示我的应用程序仅从 12.00 am - 11.59 pm 使用的时间 并且需要在第二天重新设置时间。
这是我的代码:
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.00 a.m 到晚上 11.59 的 elapsedTime,并在第二天重置时间。
谢谢。 :)
我有两种建议
- 如果您准备好修改 app_time table,您可以添加一个日期列来记录这一天。在这种情况下,您可以向用户显示基于日期的历史记录。您的查询将需要有一个日期过滤器,并且不需要重置数据库。 (您可能仍想删除超过 60 天的条目,只是为了将数据库大小控制在限制范围内)
table可以修改如下
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() + "'";
- 您可以使用每天在 12:00AM 执行的 AlarmManager,您可以在其中执行服务以重置计时器。 AlarmManager