0

ねえ、ここで問題が発生しました。

メソッドに渡された日付に基づいてデータベースから日付を取得しようとしていますが、値が返されます。

問題は、日付を受け取る変数を渡そうとすると、DBからデータを選択するメソッドが何も返さないことです。(そして、LogCatに日付変数を出力し、それで問題ありません。日付値は正しいです)が、このような文字列値( "1/01/1111")を渡すと、正しく返されます。

これは、値を取得してテキストを設定するアクティビティのメソッドです。

public void setBasicContent() {

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

}

そして、これが日付パラメータに基づいてDBからデータを選択する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;
}
4

3 に答える 3

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 + " ";

表示されている場合は、空の文字を日付に連結しているため、文字列では日付文字列に空の文字が渡されます。これは、文字列の場合に違いがあります。したがって、次のようにする必要があります。

date = (mMonth + 1) + "/" + mDay + "/" + mYear;
于 2011-02-04T23:14:19.180 に答える
0

これを行う方法をブログに書いています。Calendarオブジェクトに変換し、getTimeInMillis()を使用します。そうすれば、データベースに「long」値を格納するだけで済みます。

SQLiteデータベースにDatePickerとTimePickerを保存する

于 2012-02-29T13:19:08.030 に答える
0

db参照が正常にインスタンス化されていれば、コードに明らかに間違っているものは何も表示されません。可能であれば、date.toTime()からのミリ秒値を格納して、日付を整数としてデータベースに格納します。そうすれば、新しいDate(ミリ秒)から日付オブジェクトをインスタンス化するのがはるかに簡単になり、ロケールに従って出力をフォーマットできます。

于 2011-02-04T20:11:28.243 に答える