首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将setOnDateChangeListener的值传递给DATABASE_NAME

将setOnDateChangeListener的值传递给DATABASE_NAME
EN

Stack Overflow用户
提问于 2017-02-12 23:08:54
回答 1查看 128关注 0票数 0

如何将setOnDateChangeListener的值传递给DATABASE_NAME?

我的dbhelper格式如下

代码语言:javascript
复制
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一样。

下面是我的repo类,它从今天的日期获取总和(Fats)。

我想要的是从我在日历上单击的日期获得总和(脂肪)。

代码语言:javascript
复制
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

代码语言:javascript
复制
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();*/
                }
            }
        });
EN

回答 1

Stack Overflow用户

发布于 2017-02-12 23:18:23

如何将setOnDateChangeListener的值传递给DATABASE_NAME?

简单地说,你不应该这样做。如果您这样做了,这意味着您每天有一个数据库文件,这会导致应用程序数据中的开销。

除此之外,SQLiteOpenHelper类在构造数据库名称字符串时只会查看它,所以如果您有多个名称,则需要为每个日期重新创建该对象,这会耗尽设备的内存/电池。

理论上,这是可能的..。

代码语言:javascript
复制
@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'

但我不建议你这么做。

相反,您可以使用one主数据库和store a date column (as a TEXT or INT) within your SQLlite table

然后,您可以执行public double totalFatB(Date date),或者直接传递(year, month, day)并构建一个WHERE语句,以便从setOnDateChangeListener方法中筛选特定日期。

另外,请在该方法中再次使用SimpleDateFormat来正确构建日期字符串,如下所示。If语句非常冗长。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42189210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档