我正在尝试根据传递给方法的日期从数据库中检索日期,并返回该值。
问题在于,当我尝试传递接收日期的变量时,从DB中选择数据的方法不返回任何内容。 (我在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;
}
答案 0 :(得分:1)
我发现了错误。它位于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 + " ";
如果你看到,它会将一个空字符连接到日期,所以在String中会传递一个带有空字符的日期字符串,这对于一个字符串会产生差异。所以一定是这样的:
date = (mMonth + 1) + "/" + mDay + "/" + mYear;
答案 1 :(得分:0)
如果您的数据库引用已实例化,我在代码中看不到任何明显不正确的内容。如果可能,将日期作为整数存储在数据库中,并存储date.toTime()中的毫秒值。然后,从新的Date(毫秒)实例化日期对象会更容易,然后您可以根据区域设置格式化输出。
答案 2 :(得分:0)
我已经在博客上写了我这样做的方法。我转换为Calendar对象并使用getTimeInMillis()。这样,您只需在数据库中存储“long”值。