Проблема получения данных из БД с использованием даты DatePicker - PullRequest
0 голосов
/ 04 февраля 2011

Эй, у меня тут проблема.

Я пытаюсь получить дату из базы данных на основе даты, переданной методу, и она возвращает значение.

Проблема в том, что, когда я пытаюсь передать переменную, которая получает дату, метод, который выбирает данные из БД, ничего не возвращает.(и я печатаю переменную даты на LogCat, и все в порядке, значение даты правильное), но если я передаю строковое значение, подобное этому ("1/01/1111"), оно возвращается правильно.

здесьэто метод действия, который получает значение и устанавливает текст.

public void setBasicContent() {

    date = (mMonth + 1) + "/" + mDay + "/" + mYear + " ";
    hpdData = this.hpd.selectDuration(date);
    mDateDisplay.setText(hpdData);

}

А вот метод selectDuration (), который выбирает данные из БД на основе параметра даты.

Ах, когда я передаю переменную дату в активности, код не достигает области if(cursor.moveToFirst()).Но я не знаю почему, потому что значение переменной совершенно правильно точно так же, как нормальная строка.

public String selectDuration(String date) {

    String duration = "";
    Integer value = 0;
    String returnment = "";
    Log.i(TAG, "date to select: " + date);
    Cursor cursor = this.db.query(TABLE_NAME, new String[] { "duration" },
            "date = ?", new String[] { date }, null, null, null);

    if (cursor.moveToFirst()) {
        do {
            Log.i("SELECTDURATION", "inside cursor.moveToFirst()");
            duration = cursor.getString(0);
            value += Integer.parseInt(duration);

        } while (cursor.moveToNext());
        returnment = Integer.toString(value);
    }

    if (cursor != null && !cursor.isClosed()) {
        cursor.close();
    }
    Log.i(TAG, "valor do returnment: " + returnment);
    return returnment;
}

Ответы [ 3 ]

1 голос
/ 05 февраля 2011

Я нашел ошибку.Это метод setBasicContent().

Вот старый метод:

public void setBasicContent() {

date = (mMonth + 1) + "/" + mDay + "/" + mYear + " ";
hpdData = this.hpd.selectDuration(date);
mDateDisplay.setText(hpdData);

}

, а вот новый измененный метод:

public void setBasicContent() {

date = (mMonth + 1) + "/" + mDay + "/" + mYear;
hpdData = this.hpd.selectDuration(date);
mDateDisplay.setText(hpdData);

}

Проблема в этой строке:

 date = (mMonth + 1) + "/" + mDay + "/" + mYear + " ";

Если вы видите, он объединяет пустой символ с датой, поэтому в строке передается строка даты спустой символ, который для строки имеет значение.Так должно быть так:

date = (mMonth + 1) + "/" + mDay + "/" + mYear;
0 голосов
/ 29 февраля 2012

Я написал свой метод для этого в своем блоге.Я преобразовываю в объект календаря и использую getTimeInMillis ().Таким образом, вам нужно только сохранить «длинное» значение в базе данных.

Хранение DatePicker и TimePicker в базе данных SQLite

0 голосов
/ 04 февраля 2011

Я не вижу ничего явно некорректного в вашем коде, при условии, что ваша ссылка на базу данных создана нормально.Если возможно, сохраняйте даты как целые числа в базе данных, сохраняя значение в миллисекундах из date.toTime ().Тогда гораздо проще создать экземпляр объекта date из новой даты (в миллисекундах), а затем вы можете отформатировать вывод в соответствии с локалью.

...