如何将setOnDateChangeListener的值传递给DATABASE_NAME?
我像这样格式化了我的dbhelper
public static String getDateTime() {
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyyMMdd", Locale.getDefault());
Date date = new Date();
return dateFormat.format(date);
}
// Database Name
private static final String DATABASE_NAME = getDateTime();
虽然我将日历setOnDateChangeListener格式化,就像我格式化DATABASE_NAME一样。
以下是我的回购类,它从今天的日期获得总和(Fats) 我想要的是从我点击日历的日期获得总和(Fats)。
public double totalFatB(){
SQLiteDatabase db = dbHelper.getReadableDatabase();
String query = "SELECT SUM(Fat) FROM " +breakfast.TABLE;
Cursor c = db.rawQuery(query, null);
c.moveToFirst();
double i=c.getDouble(0);
return i;
}
这是我的onDateChangeListener
CalendarView calendarView=(CalendarView) findViewById(R.id.calendarView);
calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year, int month,
int dayOfMonth) {
month = month+1;
if ((month == 1) || (month == 2)|| (month == 3)|| (month == 4)|| (month == 5)|| (month == 6)|| (month == 7)|| (month == 8)|| (month == 9) )
{
String m= "0"+month;
if ((dayOfMonth == 1) || (dayOfMonth == 2)|| (dayOfMonth == 3)|| (dayOfMonth == 4)|| (dayOfMonth == 5)|| (dayOfMonth == 6)|| (dayOfMonth == 7)|| (dayOfMonth == 8)|| (dayOfMonth == 9) ) {
String d = "0" + dayOfMonth;
date= year +""+ m +""+ d;
Toast.makeText(getApplicationContext(),date, Toast.LENGTH_LONG).show();
/*Toast.makeText(getApplicationContext(), "" + year + m + d, Toast.LENGTH_LONG).show();*/
}
else
{
date= year +""+ m +""+ dayOfMonth;
Toast.makeText(getApplicationContext(),date, Toast.LENGTH_LONG).show();
/*Toast.makeText(getApplicationContext(), "" + year + m + dayOfMonth, Toast.LENGTH_LONG).show();*/
}
}
else if ((dayOfMonth == 1) || (dayOfMonth == 2)|| (dayOfMonth == 3)|| (dayOfMonth == 4)|| (dayOfMonth == 5)|| (dayOfMonth == 6)|| (dayOfMonth == 7)|| (dayOfMonth == 8)|| (dayOfMonth == 9) ) {
String d = "0" + dayOfMonth;
date= year +""+ month +""+ d;
Toast.makeText(getApplicationContext(),date, Toast.LENGTH_LONG).show();
/*Toast.makeText(getApplicationContext(), "" + year + month + d, Toast.LENGTH_LONG).show();*/
}
else
{
date= year +""+ month +""+ dayOfMonth;
Toast.makeText(getApplicationContext(),date, Toast.LENGTH_LONG).show();
/*Toast.makeText(getApplicationContext(), "" + year + month + dayOfMonth, Toast.LENGTH_LONG).show();*/
}
}
});
答案 0 :(得分:1)
如何将setOnDateChangeListener的值传递给DATABASE_NAME?
简单地说 - 你不应该这样做。如果这样做,那意味着每天有一个数据库文件,这会导致应用程序数据产生开销。
除此之外,SQLiteOpenHelper类只在构造时查看数据库名称字符串,因此如果您有多个名称,则为每个日期重新创建该对象,并且会耗尽设备的内存/电池。
从理论上讲,这是可能的......
@Override
public void onSelectedDayChange(CalendarView view, int year, int month,
int dayOfMonth) {
// Build a Calendar
Calendar c = Calendar.getInstance();
// c.set(); // TODO: Set year, month, dayOfMonth
...
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyyMMdd", Locale.getDefault());
// Get a database by name
String DATABASE_NAME = dateFormat.format(c.getTime());
SQLiteDatabase db = SQLiteDatabase.openDatabase(DATABASE_NAME , null, SQLiteDatabase.OPEN_READONLY);
// TODO: Query 'db'
但我不推荐它。
相反,您可以使用一个主数据库和store a date column (as a TEXT or INT) within your SQLlite table
然后,您可以直接执行public double totalFatB(Date date)
或传递(year, month, day)
并构建WHERE
语句,以便从setOnDateChangeListener
方法过滤特定日期。
另外,请在该方法中再次使用SimpleDateFormat
来正确构建日期字符串,如图所示。如果陈述非常冗长。